当我下载小文件时,一切正常,但我需要一些方法来下载大文件。如果文件很大,Blob 没有创建,没有足够的内存。 下载文件而不在客户端保存,直接保存到服务器上有很多请求的磁盘或类似的东西。
我在服务器上的代码是:
@RequestMapping(value = "/oneFile/{name}", method = RequestMethod.GET)
public void getOneFile( @PathVariable("name") String name, HttpServletResponse response,HttpServletRequest request) {
....
InputStream in = new FileInputStream(new File(file.getAbsolutePath()));
org.apache.commons.io.IOUtils.copy(in, response.getOutputStream());
response.flushBuffer();
在客户端,这适用于小尺寸:
backupFileServer.downloadOneFileBrow(data)
.success(function(databack) {
var file = new Blob([ databack ], {
type : 'application/csv'
});
var fileURL = URL.createObjectURL(file);
var a = document.createElement('a');
a.href = fileURL;
a.target = '_blank';
a.download = data;
document.body.appendChild(a);
a.click();
})
.error(function() {
alert($scope.DOWNLOAD_ERROR);
});
我尝试过类似的方法但没有成功:
var a = document.createElement('a');
a.href = 'data:attachment/csv;charset=utf-8,' + encodeURI(databack);
a.target = '_blank';
a.download = data;
document.body.appendChild(a);
a.click();
有人如何想到如何做到这一点或一些示例或代码....
提前谢谢你
最佳答案
您需要将您的文件拆分成多个文件,然后用您的服务器重建文件。 因为不拆分就上传大文件是不好的做法,用户可能会在上传到 99% 时断开连接,他需要重新上传整个文件。
这里有一个例子:https://flowjs.github.io/ng-flow/
这里有一个很好的例子:http://ryansouthgate.com/2015/12/24/upload-amazon-s3-using-angularjs/使用 Amazon S3 及其 SDK。
关于java - 如何使用 Angularjs、Java、Tomcat、Spring 和 REST 下载 10GB 的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34851334/