当我下载小文件时,一切正常,但我需要一些方法来下载大文件。如果文件很大,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();
有人想知道如何做这个或一些例子或代码.... 提前谢谢
答案 0 :(得分:3)
您需要将文件拆分为多个文件,然后使用服务器重建文件。 因为上传大文件而不拆分它是不好的做法,用户可以在99%的上传时断开连接,他需要再次上传整个文件。
此处的示例:https://flowjs.github.io/ng-flow/
这是一个很好的例子:{3}与Amazon S3及其SDK。