node.js - Node.js Multer req.file 未定义
问题描述
我尝试将图像从客户端(在反应中制作)发送到服务器(在 nodeJs 中制作),以便稍后将其上传到谷歌云存储。
但是 - 当我收到服务器 req.file 上的调用时,它是未定义的。(我确实有 req.files.file 但我使用 multer 我应该定义 req.file 。)
我将发布代码:
正面:
<input
accept='image/*'
className='ProfilePage__uploadImage'
onChange={onFileUploadChange()}
ref={inputFile}
name='file'
id='file'
type='file'
/>
onFileUploadChange 函数:
const onFileUploadChange = () => (event: React.ChangeEvent<HTMLInputElement>) => {
const image = event?.target?.files?.[0]
if (image !== undefined) {
const data = new FormData()
data.append('file', image)
axios.post('http://localhost:3006/users/uploadProfileImage', data, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
}
}
Node.js 服务器:
const multer = Multer({
storage: Multer.MemoryStorage,
limits: {
fileSize: 1000000, // Maximum file size is 10MB
}
})
usersRouter.post(
'/uploadProfileImage',
multer.single('file'),
(req, res, next) => {
// here it crushes - cannot read originalname of undefined.
const newFileName = req.file.originalname
const blob = bucket.file(newFileName)
const blobStream = blob.createWriteStream()
blobStream.on('error', (err) => console.log(err))
blobStream.on('finish', () => {
console.log('done')
})
blobStream.end(req.file.buffer)
})
解决方案
我才发现一直以来的错误是什么......
- 首先,我设法使用 req.files.file 将文件发送到 GCS
但是当我想查看它已损坏的文件时..所以我认为我需要按照教程所说的那样去做..(在他们的示例中是req.file)因此我很努力,所以它与示例相同。
但这个问题根本与它无关。
问题是 GCL 需要我为每张图片提供一个令牌。
const newFileName = req.files.file.name
const blob = bucket.file(newFileName)
const blobStream = blob.createWriteStream({
metadata: {
metadata: {
firebaseStorageDownloadTokens: uuid,
}
}
})
现在一切都按预期工作:)
感谢所有帮助过的人。
推荐阅读
- powershell - 如何使用 Powershell 将 .reg 文件导入计算机上的每个用户配置文件?
- networking - 使用 EKS 与 IP 白名单服务通信
- python - 如何在 keras/tensorflow 中定义秩大于 4 的张量的 2D 卷积
- android - 将 h5 文件转换为 tflite 文件的 input_arrays 和 output_arrays 是什么?
- c# - 为什么不能将 Func 强制转换为 Expression,而 lambda 可以
- php - symfony4 自定义验证器无法访问私有属性
- java - spring jpa crud 存储库在多线程环境中从数据库中获取旧数据
- javascript - Angular:从父组件调用函数时出错
- android-contentprovider - 用于动态功能交付(包括 contentProvider)的 Android 应用程序包可能会失败
- python - 即时调整来自另一个脚本的 dict 值