通过网络传输文件

Transferring file over network

我正在通过网络将文件(图像)从个人电脑传输到 android。服务器代码是:

int offset = 0;
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(requested));
byte[] temp = new byte[300];
int len;
while((len = bis.read(temp)) > 0){
    byte[] data;
    if(len == temp.length){
        data = temp;
    }
    else{
        data = new byte[len];
        System.arraycopy(temp, 0, data, 0, len);
    }
    writer.println(Base64.encode(data));
}
bis.close();

和接收它的客户端(android):

byte[] bytes = Base64.decode(input, Base64.NO_WRAP);
fos.write(bytes, 0, bytes.length);

(fos 变量是带有文件输出流的缓冲输出流)

文件到达,文件大小与发送的文件相同,但是在android上打开文件时,图像应用程序显示黑屏。

编辑:所有 .GIF 似乎都可以正常打开

我认为代码在发送端进行多次 base64 编码,在接收端进行一次解码。

值得确保在发送时对整个文件只进行一次编码。 并且只有一次解码发生在接收端。

稍后您可以尝试使用 N 个编码和 N 个解码。

由于发送文件夹会发送多个文件,当开始发送新文件时,关闭前一个文件的输入流为新文件打开一个文件流,但最终下载的文件的输入流从未关闭。