【问题标题】:OutputStream out of memory error while sending File to Http将文件发送到 Http 时,OutputStream 内存不足错误
【发布时间】:2015-08-20 11:54:35
【问题描述】:

较小的文件已成功上传到服务器,但是当涉及较大的文件时,以下代码会引发内存不足错误。任何解决方案? .提前致谢。

public void addFilePart(String fieldName, File uploadFile)
                throws IOException {
            String fileName = uploadFile.getName();
            writer.append("--" + boundary).append(LINE_FEED);
            writer.append(
                    "Content-Disposition: form-data; name=\"" + fieldName
                            + "\"; filename=\"" + fileName + "\"")
                    .append(LINE_FEED);
            writer.append(
                    "Content-Type: "
                            + URLConnection.guessContentTypeFromName(fileName))
                    .append(LINE_FEED);
            writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED);
            writer.append(LINE_FEED);
            writer.flush();

            FileInputStream inputStream = new FileInputStream(uploadFile);
            byte[] buffer = new byte[4096];
            int bytesRead = -1;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
            outputStream.flush();
            inputStream.close();

            writer.append(LINE_FEED);
            writer.flush();
        }

【问题讨论】:

  • 使用一些更好的 HTTP 客户端 API,它允许您流式传输您的正文,而不必先将正文加载到内存中。 OkHttpappears to be able to handle this.
  • 你为什么同时使用输出流和写入器?他们不会干涉吗?

标签: java android android-file


【解决方案1】:

使用 chunchedStreamingMode 它将帮助您将数据分块为特定大小。

con.setChunkedStreamingMode(1024);

此链接可以帮助您 Upload large file in Android without outofmemory error

【讨论】:

    【解决方案2】:

    我强烈建议您使用 HTTPClient。此外,您应该考虑使用Apache Commons IO,更具体地说,使用IOUtilsclass 将您的FileInputStream 复制到OutputStream(您的远程呼叫)使用

    IOUtils.copy(inputStream, outputStream);
    

    这将避免您必须将文件加载到内存中,从而避免OutOfMemory 异常。该文件基本上将从磁盘流式传输到服务器。

    【讨论】:

      猜你喜欢
      • 2022-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 2021-04-23
      • 1970-01-01
      • 2016-08-15
      相关资源
      最近更新 更多