gpt4 book ai didi

node.js - 在将其内容保存到 multer 之前提取 ZIP 文件

转载 作者:行者123 更新时间:2023-12-05 06:13:23 29 4
gpt4 key购买 nike

我有一个类似 express 的 REST API,并且我在整个 multer 中启用了文件上传。

我的文件上传相关逻辑都在 multer 中解决,我想保持这种状态。最近,一个新的文件类型将被添加到这个端点 (.zip),但我真的不想保存它。我希望能够重用已经实现的 multer 逻辑,但添加一个先例步骤,将文件传递给 multer,以便它可以像往常一样保存它们并完成流程。

我目前拥有的:

routes.post(
'/upload',
multer(multerConfig).single('file'),
async (req, res) => {
const { path: filePath } = req.file

const file = xlsx.readFile(filePath)
const cells = Object.values(file.Sheets).reduce((accumulator, sheet) => {
const sheetCellsKeys = Object.keys(sheet)

const sortedCellsKeys = sheetCellsKeys
.sort((previousCell, currentCell) => (
previousCell.localeCompare(currentCell, 'en', { numeric: true })
))

const validCellsKeys = sortedCellsKeys.filter((cellKey) => (
/^[A-Z]+[0-9]+$/.test(cellKey)
))

const grouppedCellsKeys = groupBy(validCellsKeys, (cellKey) => (
cellKey.replace(/\D/g, '')
))

return [
...accumulator,
...Object.values(grouppedCellsKeys)
.reduce((cellsAccumulator, cellsKeys) => ([
...cellsAccumulator,
cellsKeys.map((cellKey) => (
sheet[cellKey].v
)),
]), []),
]
}, [])

res.send(cells)
},
)

我想解压缩我的 zip 文件,并将其传递给 multer,就好像它的内容已发送到/process 端点一样。这可能吗?

最佳答案

我不知道如何更新 multer 的值。但是在这种情况下,我会创建一个中间件功能,并将其设置在 multer 中间件之后,在这个中间件中我将解压缩 zip 文件,并将 zip 文件的内容保存到存储文件夹,最后,将新文件路径传递给通过 req.file 对象进行下一个过程(因为在上一个过程中您只需要 excel 文件的路径)。

下面的代码只是我的想法的一个例子:

新的中间件

const unzipMiddleware = (req, res, next) => {
const { path: zipFilePath, mimetype } = req.file // zipFilePath is './public/uploads/file.zip'
if (mimetype !== 'application/gzip') { // You would want to check that, I think so
return next() // do nothing
}
// get content of the zipFilePath [1.xlsx, 2.xlsx, 3.xlsx,....]
// extract the zip file to storage path (maybe the same with multer setting - ./public/uploads/)

// update the value of the file info
req.file = {
path: './public/uploads/3.xlsx' // example, you just use the last file
}

next() // continue, important line
}

新中间件的使用

routes.post(
'/upload',
multer(multerConfig).single('file'),
unzipMiddleware, // use new middleware here, after multer middleware
async (req, res) => {
const { path: filePath } = req.file // now filePath will be './public/uploads/3.xlsx', instead of './public/uploads/file.zip'
//... your logic
}
)

关于node.js - 在将其内容保存到 multer 之前提取 ZIP 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63349873/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com