将文件发送到 Http 时出现 OutputStream 内存不足错误
OutputStream out of memory error while sending File to Http
较小的文件成功上传到服务器,但当涉及较大的文件时,下面的代码会抛出内存不足错误。任何解决方案?? .提前致谢。
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();
}
使用 chunchedStreamingMode 它将帮助您以特定大小分块数据。
con.setChunkedStreamingMode(1024);
这篇link可以帮到你
Upload large file in Android without outofmemory error
我强烈建议您使用 HTTPClient。此外,您应该考虑使用 Apache Commons IO,更具体地说,IOUtils
class 使用 [=16] 将您的 FileInputStream
复制到 OutputStream
(您的远程调用) =]
IOUtils.copy(inputStream, outputStream);
这将避免您必须将文件加载到内存中,从而避免 OutOfMemory
异常。该文件基本上将从磁盘流式传输到服务器。
较小的文件成功上传到服务器,但当涉及较大的文件时,下面的代码会抛出内存不足错误。任何解决方案?? .提前致谢。
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();
}
使用 chunchedStreamingMode 它将帮助您以特定大小分块数据。
con.setChunkedStreamingMode(1024);
这篇link可以帮到你 Upload large file in Android without outofmemory error
我强烈建议您使用 HTTPClient。此外,您应该考虑使用 Apache Commons IO,更具体地说,IOUtils
class 使用 [=16] 将您的 FileInputStream
复制到 OutputStream
(您的远程调用) =]
IOUtils.copy(inputStream, outputStream);
这将避免您必须将文件加载到内存中,从而避免 OutOfMemory
异常。该文件基本上将从磁盘流式传输到服务器。