js如何将本地文件夹 压缩 然后上传到服务器。

新手上路,请多包涵

公司做一项目,需要将用户本地的文件夹进行压缩然后传给后端,请问能否用js实现。

阅读 8.7k
8 个回答

jszip确实可以,拿到fileblobjszip转换成zip

这是一个下载的例子,上传不会有什么区别。

<input type="file" id="test" onchange="zipFiles(this)" multiple="multiple" webkitdirectory />
function zipFiles(dom){
  let zip = new JSZip();
  for(let f of dom.files){
      zip.file(f.webkitRelativePath, f);
  }
  
 zip.generateAsync({type:"blob"})
  .then(function (blob) {
    const link = document.createElement('a');
    link.href = window.URL.createObjectURL(blob);
    link.download = 'test.zip';
    link.click();
  });
}

https://codepen.io/a631807682...

你可以试一下jszip。

npm install jszip

一般都是后端压缩文件夹

首先,上传用js是可以的,FormData(),压缩建议不要用js在线压缩,即便是可以的也不要,原因有下
一 js是单进程的,你压缩吃内存,你得让用户等很久
二 一般你上传的就是.rar .zip压缩完的,这样要让用户自压缩完上传,因为如果上传一个 shell,或者其他脚本文件,用户是不是相当于自己上传了一个后门呢,随时可以操作你的服务器?
三、现在基本上上传到各类云,比如七牛,然后返回的是云里面的地址,这个是正确的做法

纯js在单纯的浏览器环境中是不可能这样做的。
其实这个最好的办法是让用户自行压缩,然后上传,这个就比较常见啦。

想多了吧

你这里的用户,指的是通过浏览器访问你们网站的用户吗?

如果没有理解错误的话,根本不可能!

如果你都能不经过用户同意,直接上传用户本地文件了,那谁还敢用浏览器上网!

除非用户用的是你自家开发的浏览器!!!

——————————

貌似理解错了问题,你问的是在用户主动上传的情况下,怎么压缩。

那应该也无法直接在前端压缩,浏览器应该不直接提供这种api吧。

上面用户提到的 jszip,确实不错的插件,学习了!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题