Transfer a file between Android devices?

不羁岁月 提交于 2019-12-04 07:55:13
momo

You need to package the data to the stream through a some kind of data format. One way to do this is to use the common MIME data format which is commonly used to send attachment in email.

I have answered other question related to sending binary via socket using this format in the following SO Question - android add filename to bytestream. You could check the accepted answer for that question.

For your reference, I just copied the code for sending and receiving through socket from that question below.

File  f = new File(path);
BufferedOutputStream out = new BufferedOutputStream( socket.getOutputStream() );
String filename=path.substring(path.lastIndexOf("/")+1);

// create a multipart message
MultipartEntity multipartContent = new MultipartEntity();

// send the file inputstream as data
InputStreamBody isb = new InputStreamBody(new FileInputStream(f), "image/jpeg", filename);

// add key value pair. The key "imageFile" is arbitrary
multipartContent.addPart("imageFile", isb);

multipartContent.writeTo(out);
out.flush();
out.close();

And the code to read it back below using MimeBodyPart that is part of JavaMail.


MimeMultipart multiPartMessage = new MimeMultipart(new DataSource() {
    @Override
    public String getContentType() {
        // this could be anything need be, this is just my test case and illustration
        return "image/jpeg";
    }

    @Override
    public InputStream getInputStream() throws IOException {
        // socket is the socket that you get from Socket.accept()
        BufferedInputStream inputStream = new BufferedInputStream(socket.getInputStream());
        return inputStream;
    }

    @Override
    public String getName() {
        return "socketDataSource";
    }

    @Override
    public OutputStream getOutputStream() throws IOException {
        return socket.getOutputStream();
    }
});

// get the first body of the multipart message
BodyPart bodyPart = multiPartMessage.getBodyPart(0);

// get the filename back from the message
String filename = bodyPart.getFileName();

// get the inputstream back
InputStream bodyInputStream = bodyPart.getInputStream();

// do what you need to do here....

There's an open source project released by Google you can take a look at it and have a general idea about connecting devices and sharing files between them.

Here is the link: android-fileshare

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!