我需要在服务器上传文件。它可以通过webservice /或UI完成。我只需要将该文件内容存储在DB中。 文件也可以是2到4 GB的任何大小。我不知道什么是在没有服务器的情况下上传大尺寸文件的方式 失去内存异常?
系统配置: - 8 GB,java 7 64位处理器。
答案 0 :(得分:2)
我不确定在没有内存不足的情况下在服务器上上传大文件的方法是什么?
那部分很容易。不要将整个文件缓冲在内存中。将其直接流式传输到磁盘。
(伪代码......忽略异常处理和资源管理)
InputStream in = ...
OutputStrean out = ... // the place you want to ultimately store the file
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = in.read(buffer)) > 0) {
out.write(buffer, 0, bytesRead);
}
// close streams.
<强>更新强>
您似乎对如何获取输入流感到困惑。
如果您使用的是Servlet API,那么您可以使用ServletRequest.getInputStream()
获取请求的输入流。
如果您使用不同的API,请具体......我会为您调查。
更难的部分是处理与上传文件编码,封装等有关的各种问题。为此,最好的方法是寻找现有的解决方案。但这取决于您上传的环境;例如您正在使用的Web容器等等。
以下是一个例子:http://commons.apache.org/proper/commons-fileupload/