【发布时间】:2021-01-31 21:11:10
【问题描述】:
我有一条 Express 路由,可以连接到我的 google-storage 存储桶并上传一张图片。我试图贴近 Google 的代码示例,但从 multer 缓冲区直接转到存储桶。
该过程似乎已完成,但未返回 en err。但是,该文件以 0B 大小出现在存储桶中。所以看起来元数据到达但图像缓冲区没有......??
谁能看出我做错了什么?
如果可能,我希望在没有其他 NPM 帮助包(如 multer-cloud-storage 和所有其他变体)的帮助下使其工作。
const Multer = require("multer");
const multer = Multer({
storage: Multer.MemoryStorage,
fileSize: 5 * 1024 * 1024
});
const {Storage} = require('@google-cloud/storage');
const storage = new Storage({
projectId: 'project-name',
keyFile: '../config/project-name.json'
});
const bucket = storage.bucket('bucket-name');
app.post('/upload', multer.single('file'), function (req, res) {
const blob = bucket.file(req.file.originalname);
const blobStream = blob.createWriteStream({
metadata: {
contentType: req.file.mimetype
},
resumable: false
});
blobStream.on('error', err => {
next(err);
console.log(err);
return;
});
blobStream.on('finish', () => {
blob.makePublic().then(() => {
res.status(200).send(`Success!`);
})
})
blobStream.end();
})
【问题讨论】:
-
我在您的代码中没有看到实际写入 blobStream 的任何地方。
-
我认为 blob.createWriteStream() 继承了req.file.buffer 对象,不是吗?这里描述的方式表明它是通过管道输入的。blog.datawheel.us/…
-
没有继承任何东西。您必须明确说明如何处理节点流。
-
谢谢@DougStevenson。我显然超出了我的深度。如何将 multer memorystore 缓冲区通过管道传输到 createWriteStream() 中?
标签: node.js express google-cloud-storage