使用multer将文件从前端上传(直接流式传输)到谷歌云存储



我正在管理一个构建在MERN堆栈中的门户,用户可以在其中独立上传创建的新音频/视频内容。我决定使用谷歌云存储作为存储用户内容的服务。(我知道你也可以使用Firebase,目前我更喜欢使用"仅"云存储(。

在后端,通过express,我创建了一个POST/usercontent端点,并通过multer接收文件,然后将其保存在Google Cloud上。

一切都很完美,但我不明白我是否工作正确:我希望文件直接保存在GCloud上,而不保存,甚至不临时保存在后端。这是因为内容可能很大,我可能有内存问题。

我知道我需要使用流、管道和PassThrough,但目前我对这个主题的了解有限。我仔细阅读了这些答案和例子,但我不知道如何在结合multer的同时正确工作。

来源:

https://github.com/googleapis/nodejs-storage/blob/main/samples/streamFileUpload.js无法将文件读取流从Google云存储管道传输到Google Drive APIhttps://cloud.google.com/storage/docs/streaming#code-样品如何使用nodejs将内存中的文件数据上传到谷歌云存储?

我的代码:

import Multer from 'multer';
import { Storage } from '@google-cloud/storage';
// config multer
const multerStorage = Multer({
storage: Multer.memoryStorage(),
limits: { fileSize: 10*1024*1024 }
});
// set endpoint
router.post('/upload', multerStorage.single('uploadedFile'), async (req, res, next) => {
// creates a client from a Google service account key
const storage = new Storage({
projectId: 'xxx',
keyFilename: 'yyy'
});
// access bucket
const bucket = storage.bucket('bucketName');
// create new file inside bucket
const newFile = bucket.file(req.file.originalname);
// STREAM ***HERE MY DOUBTS! ***
const fileStream = newFile.createWriteStream({
metadata: {
contentType: req.file..mimetype
},
resumable: false
});
fileStream.write(req.file.buffer);
fileStream.on('error', err => {
console.error('error', err)
});
fileStream.on('finish', () => {
console.log('finish!');
});
fileStream.end();
// 7 response
res.status(200).json({ 
status: res.statusCode,
message: 'Upload OK'
});
});

有人能帮我实现这个代码,直接将流发送到谷歌云存储吗?

流式传输的目的是将数据流式传输到您的云存储帐户或从您的云存储器帐户流式传输数据,而无需将数据首先保存到本文档中提到的文件中。

这里介绍了您关心的方法createWriteStream。您可以使用此处提供的选项来控制流。

对于可恢复的上传,如果目录如本文档所述是可写的,则可以在本地存储文件。

可恢复上传是自动启用的,必须通过将options.Resumable设置为false来明确关闭。

可恢复的上载需要对$HOME目录的写访问权限。通过config-store,存储一些元数据。默认情况下,如果目录不可写,我们将返回到简单的上传。但是,如果您明确请求可恢复上传,而我们无法写入配置目录,我们将返回ResumeableUploadError。

在您的情况下,正如您所说的选项.resumable为false,它应该是一个简单的上传,不应该在本地存储文件。

要检查它是否存储在本地存储中,可以在阻止二进制写入磁盘的范围内运行代码。或者,您可以在上载操作期间监视磁盘使用情况。

最新更新