将文件发送到Http时,OutputStream内存不足错误

时间:2015-08-20 11:54:35

标签: java android android-file

较小的文件大小成功上传到服务器但是当它来到较大的文件时,下面的代码会抛出内存不足错误。任何解决方案。提前谢谢。

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();
        }

2 个答案:

答案 0 :(得分:6)

使用chunchedStreamingMode它可以帮助您按特定大小分块数据。

con.setChunkedStreamingMode(1024);

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

答案 1 :(得分:3)

我强烈建议您使用HTTPClient。此外,您应该考虑使用Apache Commons IO,更具体地说是IOUtils类,使用

FileInputStream复制到OutputStream(您的远程调用)
IOUtils.copy(inputStream, outputStream);

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