Cloudinary上传raw类型文件返回结果无文件扩展名如何解决
问题根因
- 你使用multer上传生成的临时文件默认不带原始文件扩展名,Cloudinary读取临时文件时无法识别对应后缀
- raw类型资源默认不会自动把扩展名追加到
public_id、url、secure_url等返回字段中,需要额外配置参数
解决方案
修改上传逻辑,手动提取原始文件扩展名传入Cloudinary上传配置即可,修改后的代码如下:
const path = require('path'); // 顶部引入node内置path模块 router.post("/uploadFileMessage", upload.single('file'), async (req, res) => { // 提取原始文件扩展名,移除开头的.符号 const fileExtension = path.extname(req.file.originalname).slice(1); cloudinary.v2.uploader.upload(req.file.path ,{ use_filename: true, resource_type: 'raw', format: fileExtension, // 手动指定文件格式 keep_original_extension: true // 配置将扩展名保留到返回的public_id、url字段中 },async function(error, result) { if(error) return res.status(400).send(error) return res.status(200).send(result) }) })
补充说明
如果不需要Cloudinary自动为文件名添加随机后缀,可以在配置中新增unique_filename: false,最终生成的public_id会完全匹配原始文件名加扩展名。
内容的提问来源于stack exchange,提问作者Mr.EmD
相关产品推荐
相关产品推荐

