React CKEditor 5在前端。当用户将图像添加到编辑器的内容时,尝试将图像上传到云存储桶。从云功能上传到云存储,但是我得到了Error: Not Found
,我真的不知道该怎么办。
这是我的代码:
module.exports = async (req) => {
const tmpFilePath = path.join(os.tmpdir(), 'tmpImage.png')
fs.writeFile(tmpFilePath, req.body, (err) => {
if(err) throw err
fs.readFile(tmpFilePath, (err, data) => {
console.log('Error: ', err)
console.log('Data: ', data)
})
})
try {
await storage.bucket('bucketUrl').upload(tmpFilePath, {
gzip: true,
metadata: {
cacheControl: 'public, max-age=31536000',
}
})
return 'Something'
} catch (err) {
console.log('----- ERROR START -----')
console.log(err)
console.log('----- ERROR END -----')
return { error: err }
}
}
错误:
Error: Not Found
> at new ApiError (/Users/garrettlove/development/devgrub/functions/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/build/src/util.js:59:15)
> at Util.parseHttpRespMessage (/Users/garrettlove/development/devgrub/functions/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/build/src/util.js:161:41)
> at Util.handleResp (/Users/garrettlove/development/devgrub/functions/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/build/src/util.js:135:76)
> at retryRequest (/Users/garrettlove/development/devgrub/functions/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/build/src/util.js:434:22)
> at onResponse (/Users/garrettlove/development/devgrub/functions/node_modules/retry-request/index.js:206:7)
> at res.text.then.text (/Users/garrettlove/development/devgrub/functions/node_modules/@google-cloud/storage/node_modules/teeny-request/build/src/index.js:150:17)
> at process._tickCallback (internal/process/next_tick.js:68:7)
如果你想看到其余的错误,请告诉我,这有点太多了。
代码试图在将文件写入磁盘之前上载该文件。fs.writeFile是异步的,并且在写入完成之前立即返回。根据链接的API文件:
当文件是文件名时,异步将数据写入文件,如果文件已经存在,则替换该文件。数据可以是字符串或缓冲区。
如果您想等到文件完全写入,请考虑:
- 只有在写入完成后,才能使用传递给它的回调函数上传文件。上传代码应该在该回调中
- 使用处理promise而不是回调的writeFile版本,并链接promise
- 使用fs.writeFileSync进行同步写入