You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

使用JSZip生成testing.zip后解压路径不符合预期的问题求助

解决JSZip生成压缩包路径结构错误的问题

我明白你遇到的困扰了——用JSZip打包图片后,解压出来的路径带着URL转义后的冗余结构,而不是你期望的简洁testing/image.jpg。这是因为你直接把完整URL当作了文件路径,我们只需要从URL中提取实际文件名,再手动指定压缩包内的路径就能解决!

核心问题原因

你当前的代码里,应该是直接将完整的URL作为压缩包内的文件路径,JSZip会自动转义URL里的特殊字符(比如:/),导致生成了冗余的嵌套路径。

解决方案步骤

  • 从URL中提取文件名:通过字符串分割方法,获取URL最后一段的文件名(比如image.jpg
  • 指定压缩包内的目标路径:将提取到的文件名放在你想要的文件夹下(比如nombre/image.jpg

修改后的完整代码

var urls = ['https://s3-us-west-2.amazonaws.com/files/image.jpg'];
var nombre = $scope.meetingName; 

// 调用函数
compressed_img(urls, nombre);

function compressed_img(urls, nombre) {
  var zip = new JSZip();
  var count = 0;
  var name = nombre + ".zip";

  urls.forEach(function (url) {
    JSZipUtils.getBinaryContent(url, function(err, data) {
      if(err) {
        throw err; // 处理请求错误
      }
      // 从URL中提取文件名:分割URL取最后一段
      const fileName = url.split('/').pop();
      // 指定压缩包内的路径:文件夹名/文件名
      zip.file(`${nombre}/${fileName}`, data, {binary: true});
      count++;
      // 所有文件处理完成后生成压缩包
      if(count === urls.length) {
        zip.generateAsync({type:'blob'}).then(function(content) {
          // 这里可以添加下载逻辑,比如用saveAs保存
          // saveAs(content, name);
        });
      }
    });
  });
}

关键代码解释

  • url.split('/').pop():把URL按/分割成数组,取最后一个元素就是文件名,这个方法能兼容不同结构的URL。
  • zip.file(${nombre}/${fileName}, data, {binary: true}):明确指定压缩包内的路径为你的文件夹名/文件名{binary: true}确保二进制文件(比如图片)被正确处理。

这样修改后,生成的testing.zip解压后就会得到testing/image.jpg的结构啦!

内容的提问来源于stack exchange,提问作者Gokulakrishnan M

火山引擎 最新活动