【问题标题】:Sending file > 1MB using HTTP POST使用 HTTP POST 发送大于 1MB 的文件
【发布时间】:2012-04-02 11:35:29
【问题描述】:

我正在将视频和音频文件从我的 Android 应用程序发送到 Wampserver,其中一些可能会变得非常大,当文件大小大约超过 1MB 时,我往往会遇到 OutofMemory 问题。

我将每个文件单独转换为字节流。我认为字节流太大,因此OutofMemory

如何阻止此错误的发生?

【问题讨论】:

    标签: android http-post large-file-upload


    【解决方案1】:

    【讨论】:

    • 该代码是否将文件拆分为多个部分或其他内容?虽然我不认为这是那种问题。我将每个文件单独转换为字节流。我认为字节流太大,因此 OutofMemory..
    • 它给出连接的OutputStream并将文件读入流中。 outputStream = new DataOutputStream(connection.getOutputStream(); 服务器需要将该流写入某处。如果您读取文件 1024 字节,它将永远不会占用比 1K 更多的内存。使 maxBufferSize = 4096。当您打开文件进行流式传输时,它不会'不会被加载到内存中
    • 如果你显示上传的那段代码,会更容易猜出那里出了什么问题。
    • 这确实适用于大于 1MB 的文件,但现在我无法发送大小超过 7MB 的文件。我再次遇到 OutOfMemory 问题..
    【解决方案2】:

    使用这里建议的 Maxium 链接:

    Uploading files to HTTP server using POST on Android.

    然后我找到了这个Out of Memory error in android 来修复错误。

    替换:

    while (bytesRead > 0)
    {
        outputStream.write(buffer, 0, bufferSize);
        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);
    }
    

    与:

    while (bytesRead > 0){
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        byte byt[]=new byte[bufferSize];
        fileInputStream.read(byt);
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        outputStream.write(buffer, 0, bufferSize);
    }
    

    【讨论】:

    • @Maxim 是的,我修好了。我赞成您的回答,因为它部分解决了我的问题。
    • 谢谢,但我只是好奇它是否对你有用,因为我没有时间编写服务器部分来找出为什么它仍然不起作用。分数不重要
    【解决方案3】:

    当您有大文件或大图像/高质量图像等大量数据要发送到服务器时,您可以将其分块/块发送。

    首先与服务器建立 Http 连接,然后发送带有DataOutputStream 类的块。同样在服务器端,您需要实现代码来接收这些块,并在获得所有块后将它们放在一个文件中。

    【讨论】:

    • 这就是 TCP/IP 的发明目的
    猜你喜欢
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2012-01-03
    • 1970-01-01
    相关资源
    最近更新 更多