【发布时间】:2020-12-22 09:48:42
【问题描述】:
我正在尝试使用节点 js 和快速文件上传将文件上传到谷歌云存储桶。到目前为止,当我上传文件时,文件本身会上传到存储桶,但文件大小没有,这导致图像无法正常工作。
// uploading single image
const fileData = req.files.files
const creteFeed = await new Feed({
feedby: req.user,
feedTxt: txt,
deleted: 0,
feedReaction: 0,
feedComment: 0,
feedShare: 0,
feedType: Feedtype,
})
const newFeed = await creteFeed.save()
if (newFeed) {
const FeedMed = await new FeedMedia({
feedby: req.user,
feed_id: newFeed._id,
feedMedia_type:fileData.mimetype,
feedMedia_name: fileData.name,
category:'feed',
url: `https://storage.googleapis.com/${bucket.name}/${fileData.name}`,
deleted: 0
})
const newFeedMed = await FeedMed.save()
if(newFeedMed){
// Create a new blob in the bucket and upload the file data.
const blob = bucket.file(fileData.name);
const blobStream = blob.createWriteStream();
blobStream.on('finish', res => {
});
blobStream.on('finish', () => {
// The public URL can be used to directly access the file via HTTP.
const publicUrl = `https://storage.googleapis.com/${bucket.name}/${blob.name}`
res.status(200).send(publicUrl);
});
blobStream.end(fileData.buffer);
// res.json('success')
}
}
}
【问题讨论】:
-
你在 blobStream 中写了什么?
-
第一个 blobstream 是一个错误,第二个是获取已上传文件的 URL,但该文件正在 googl 存储桶上工作,因为没有文件大小
-
尝试在创建流中添加一些选项,例如:
blob.createWriteStream({ metadata: { contentType: file.mimetype } })并删除空的.on('finish'),如果这有帮助,请告诉我。 -
谢谢大家,我只是切换到 multer 而不是 express-fileupload,它似乎工作正常
标签: node.js google-cloud-storage multer