【发布时间】:2021-04-25 03:11:26
【问题描述】:
我需要实现的是允许用户从他的浏览器将文件上传到谷歌云存储:用户选择一个文件,一个包含该文件的 FormData 被创建并发送到一个云函数。 Cloud Function 然后将数据发送到 Google Cloud Storage。这段代码适用于小文件。但是当我尝试上传更大的文件时(30mo 是我通常想要发送的大小)我有这个错误
PayloadTooLargeError: request entity too large
看起来云功能会检查上传数据的大小,即使尝试使限制更大。有什么办法可以超越 10mo 的限制?
app.use(bodyParser.json({limit: '50mb'}))
app.use(bodyParser.urlencoded({limit: '50mb', extended: true }));
app.post("/upload-my-file", async (req, res) => {
try {
await authentChecker(req.headers)
const busboy = new Busboy({headers: req.headers});
busboy.on('file', (fieldname, file, filename) => {
const storage = new Storage();
const myBucket = storage.bucket('my-bucket-name');
const newBucketFile = myBucket.file(filename);
//I don't write a temp file on disk, I directly upload it
file.pipe(newBucketFile.createWriteStream())
.on('error', function(err) {
console.log(err)
})
.on('finish', function() {
console.log("finish")
});
})
// Triggered once all uploaded files are processed by Busboy.
// We still need to wait for the disk writes (saves) to complete.
busboy.on('finish', async () => {
res.send();
});
busboy.end(req.rawBody);
} catch (error) {
next(error)
}
})
【问题讨论】:
标签: node.js express google-cloud-platform google-cloud-storage busboy