如何使用Angularjs,Java,Tomcat,Spring和REST下载10GB文件?

时间:2016-01-18 09:33:17

标签: java angularjs spring rest tomcat

当我下载小文件时,一切正常,但我需要一些方法来下载大文件。如果文件很大,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();

有人想知道如何做这个或一些例子或代码.... 提前谢谢

1 个答案:

答案 0 :(得分:3)

您需要将文件拆分为多个文件,然后使用服务器重建文件。 因为上传大文件而不拆分它是不好的做法,用户可以在99%的上传时断开连接,他需要再次上传整个文件。

此处的示例:https://flowjs.github.io/ng-flow/

这是一个很好的例子:{3}与Amazon S3及其SDK。