MongoDB:从 mongodb 下载后出现 Zip 文件错误

MongoDB: Zip File Error after download from mongodb

我正在尝试将 zip 文件附加到对象并在从客户端调用该对象时请求 zip 文件,我能够像这样上传 zip 文件

const upload = multer({
    fileFilter(req, file, cb){
        if (!file.originalname.match(/\.(html|zip)$/)) {
            return cb(new Error("Please upload a .html or .zip file"))
        }
        cb(undefined, true)
    }
})

router.post('/map/:id/file/upload/zip', auth, upload.single('zip'), async(req, res) => {
    try {
        const map = await Map.findOne({_id:req.params.id})
        if (!map) {
            return res.status(400).send({"message":"Map is not found in database"})
        }
        map.zipBuffer = req.file.buffer
        map.save()
        res.status(201).send(map)
    } catch (e) {
        res.status(500).send(e)
    }
})

保存成功,但每次下载我都会得到

The archive is either in unknown format or damaged

这是我用于提取 zip 文件的代码块

router.get('/map/:id/file/upload/zip', async(req,res) => {
    try {
        const map = await Map.findOne({_id:req.params.id})
        if (!map) {
            return res.status(400).send({"message":"No map found"})
        }
        const html = map.htmlBuffer
        res.set("Content-Type","application/x-zip-compressed")
        res.send(html)
    } catch (e) {
        res.status(500).send(e)
    }
})

我需要有关如何正确上传压缩文件并在不损坏文件的情况下取回文件的帮助。

有趣的是,你问题的答案已经在看着你了。

下面的代码有些不一致:

const html = map.htmlBuffer
res.set("Content-Type","application/x-zip-compressed")
res.send(html)

此处您将文件作为 HTML 缓冲区发回,而您期待的是 zip 格式。

用正确的格式重构上面的代码,你应该没问题。

只是想为 建议一个更通用的方法,你可以写

res.set("Content-Type", map.contentType)