如何打包下载文件服务器文件?

本文共有2617个字,关键词:

问题:如何打包下载文件服务器文件?

老方法是在后端将远程文件从文件服务器上下载到后端服务器,然后将打包后的文件链接返回给前端,然后前端再下载,这样就会导致两次下载,非常慢

解决:后端返回文件服务器中文件链接,然后前端下载远程文件并打包

方法:

1、后端返回需要打包下载的文件夹及文件列表,最好组装成一个数组
如:

[
    {
        "n": "\u4e00",
        "p": "\u4e00",
        "t": "d"
    },
    {
        "n": "111",
        "p": "\u4e00/111",
        "t": "d"
    },
    {
        "n": "22",
        "p": "\u4e00/111/22",
        "t": "d"
    },
    {
        "n": "date_info.txt",
        "p": "\u4e00/111/22",
        "l": "http://10.16.32.80/group1/M00/00/39/ChAgYmSXsvSAdedHAACTMxFor5I924.txt",
        "t": "f"
    },
    {
        "n": "base_roles.txt",
        "p": "\u4e00/111",
        "l": "http://10.16.32.80/group2/M00/00/39/ChAgY2SXst6AFuecAAAB7z6Nwvw682.txt",
        "t": "f"
    }
]

前端代码:
1、先引入jszip、jszip-utils

<script src="/static/js/jszip.min.js"></script>
<script src="/static/js/jszip-utils.min.js"></script>

2、处理后端返回的数组

$.post('/api/batch/download',{'fids': fids, 'rids': rids,
},function(data){
    if(data.code){
        alert('', data.msg);
        return false;
    }

    var files_data = data.files_data;
    var time_str = data.time_str;
    var total = files_data.length;
    var num = 0;
    const zip = new JSZip();
    files_data.map(function(file){
        if(file['t'] == 'd'){
            zip.folder(file['p']);
            ++num;
        }else if(file['t'] == 'f'){
            var path = zip.folder(file['p']);
            // 获取远程文件
            JSZipUtils.getBinaryContent(file['l'], function(err, binData){
                ++num;
                path.file(file['n'], binData, {binary: true});
                if(num == total){
                    zip.generateAsync({type:"blob"}).then(function(content) {
                        const link = document.createElement('a');
                        link.href = window.URL.createObjectURL(content);
                        link.download = 'resource_'+ time_str +'.zip';
                        link.click();
                        link.remove();
                    });
                }
            });
        }
    });
});

参考:

https://zhuanlan.zhihu.com/p/135384758
https://github.com/Stuk/jszip-utils
https://github.com/Stuk/jszip
https://gitee.com/mirrors/jszip
版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。
添加新评论
暂无评论