weixin_45550025 2023-09-07 17:36 采纳率: 0%
浏览 14

ZipUncompressStreamError: invalid comment length

问题遇到的现象和发生背景
遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
运行结果及详细报错内容
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”


//地图资源更新
app.post('/fileUpload', (req, res, next) => {
    let isSendSuccess = false;
    let buffers = [];
    req.on('data', (trunk) => {
        //console.info("trunk.length:"+trunk.length);
        buffers.push(trunk);
        //console.info("trunk:"+trunk);
    }).on('end', async () => {
        console.log("fileUpload 上传完成");
        res.end(JSON.stringify({
            "code": 200,
            "msg": "upload success"
        }));
        isSendSuccess = true;
        const buffer = Buffer.concat(buffers);
        fs.writeFileSync('satellite.zip', buffer);

使用udpload上传文件时,在存为.zip文件后,使用compressing.zip.uncompress报错:ZipUncompressStreamError: invalid comment length. expected: 46. found: 0;但是用鼠标可以解压。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-07 23:43
    关注

    【以下回答由 GPT 生成】

    首先, 让我们来理解一下错误信息。错误信息中提到了一个"invalid comment length"的错误。这通常是由于压缩文件中的注释字段长度不正确导致的。根据错误信息, 预期的注释字段长度应为46,但实际上长度为0。这可能是由于上传的.zip文件中没有包含注释或者注释长度的问题导致的。

    针对该问题, 我们可以做以下的解决方案:

    1. 验证上传的.zip文件是否损坏或者非法。我们可以使用adm-zip这样的库来进行操作,该库支持解压损坏的.zip文件。

    2. 对上传文件的代码进行优化,确保正确地接收到完整的.zip文件内容。

    根据你提供的代码,我们可以发现有一个问题,就是你在处理文件上传时使用的是req.on('data', ...)方法,这可能会导致文件内容被分片传输,并且我们无法保证收到的数据是完整的。因此,我们应该使用formidable, multer, busboy等库来处理文件上传,这些库可以帮助我们正确地接收文件并确保完整性。

    下面是一个使用formidable库的示例代码:

    const formidable = require('formidable');
    // ...
    
    app.post('/fileUpload', (req, res, next) => {
      const form = formidable({multiples: true});
    
      form.parse(req, (err, fields, files) => {
        if (err) {
          console.log(err);
          res.statusCode = 400;
          res.send({ error: 'Failed to parse uploaded file' });
          return;
        }
    
        const file = files['upload'];
    
        // 检查文件是不是zip文件
        if (file.type !== 'application/zip') {
          console.log('Invalid file type. Only zip files are allowed.');
          res.statusCode = 400;
          res.send({ error: 'Invalid file type. Only zip files are allowed.' });
          return;
        }
    
        // 将文件保存为satellite.zip
        fs.renameSync(file.path, 'satellite.zip');
    
        // 继续处理解压逻辑
        // ...
    
        res.statusCode = 200;
        res.send({ message: 'File uploaded successfully.' });
      });
    });
    

    使用formidable库可以确保正确地接收到完整的.zip文件,从而避免了注释长度错误等问题。

    注意:我们可以在解压缩逻辑中继续使用compressing库,如果仍然出现错误,可能需要考虑文件的有效性或者使用其他的库进行解压缩操作。

    希望以上解决方案对你有所帮助。如果还有其他问题,请随时提问。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 9月7日

悬赏问题

  • ¥15 ssh登录页面的问题
  • ¥60 渗透一个指定银行app,拿到客户信息,需要什么级别
  • ¥50 关于在matlab上对曲柄摇杆机构上一点的运动学仿真
  • ¥15 jetson nano
  • ¥15 :app:debugCompileClasspath'.
  • ¥15 windows c++内嵌qt出现数据转换问题。
  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥15 用MATLAB汇总拟合图