Cloudinary\Error:缺少必需的参数 - 文件 - Express 和 Postman
Posted
技术标签:
【中文标题】Cloudinary\\Error:缺少必需的参数 - 文件 - Express 和 Postman【英文标题】:Cloudinary\Error: Missing required parameter - file - Express and PostmanCloudinary\Error:缺少必需的参数 - 文件 - Express 和 Postman 【发布时间】:2021-06-02 02:26:55 【问题描述】:第一次尝试将图像上传到 Cloudinary,我在通过 Postman 使用 Express 时遇到了问题。
Using form-data on setting 'file' to upload an image to Cloudinary
截至目前,当我尝试访问 req.body 时,我得到一个空对象,所以我想这与为什么 cloudinary.uploader.upload 无法读取作为其第一个参数传递的文件有关,因为它的 req. body.file,如下代码所示。
cloudinary.config(
cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
api_key: process.env.CLOUDINARY_KEY,
api_secret: process.env.CLOUDINARY_SECRET
)
exports.upload = async (req, res) =>
try
console.log(req.body);
const result = await cloudinary.uploader.upload(req.body.file,
public_id: `$Date.now()`,
resource_type: "auto"
)
return res.json(
public_id: result.public_id,
url: result.secure_url
)
catch(err)
console.log(err)
我得到的错误信息:
message: 'Missing required parameter - file',
name: 'Error',
http_code: 400
有解决这个问题的建议吗?
【问题讨论】:
【参考方案1】:我解决了!我无法将表单数据作为 req.body 传递给服务器,所以我不得不尝试通过 req.files 访问它,但也无法使用它,所以我搜索了一下,发现了一个中间件' express-fileupload',这就是诀窍。我只是将它添加到我的 app.js 中并使用了
const fileupload = require('express-fileupload');
app.use(fileupload(useTempFiles: true))
所以现在我可以访问我的 req.files。
exports.upload = async (req, res) =>
const file = req.files.image
try
console.log(file);
const result = await cloudinary.uploader.upload(file.tempFilePath,
public_id: `$Date.now()`,
resource_type: "auto"
)
res.json(
public_id: result.public_id,
url: result.secure_url
)
catch(err)
console.log("Error", err)
return res.status(400).json(error: err)
我得到的回应是:
name: 'some-image.png',
data: <Buffer >,
size: 99770,
encoding: '7bit',
tempFilePath: ' **C:\\filepath\some-image.png** ',
truncated: false,
mimetype: 'image/png',
md5: 'b5f612a571442bf604952fd12c47c1bf',
mv: [Function: mv]
POST /cloudinary/upload-images 200 1617.944 ms - 119
它已成功上传到我的 Cloudinary。
【讨论】:
【参考方案2】:const 结果 = await cloudinary.uploader.upload(req.file,
public_id:$Date.now()
,
资源类型:“自动”
)
并从表单数据中添加文件,类型应为文件
【讨论】:
您的答案可以通过添加有关代码的作用以及它如何帮助 OP 的更多信息来改进。另请查看help center 以获取有关如何格式化代码的信息。【参考方案3】:解决了!
这就是我设置 FormData 的方式
let myTestForm = new FormData();
myTestForm.set("name", name);
myTestForm.set("email", email);
myTestForm.set("Avatar", Avatar);
myTestForm.set("password", password);
这就是我使用 FormData 的方式
const config =
headers:
"Content-type": "multipart/form-data",
,
;
const data = await axios.post(`/api/v1/register`, userData, config );
请不要这样传递 userData
,为此苦苦挣扎:/
这就是我上传图片的方式
const myCloud = await cloudinary.v2.uploader.upload(req.body.Avatar,
folder: "Avatars",
width: 150,
crop: "scale",
public_id: `$Date.now()`,
resource_type: "auto",
);
PS:就我而言,我只需要上传 1 张图片。 app.js 文件中没有传递任何参数
app.use(bodyParser.urlencoded( extended: true ));
app.use(fileUpload());
【讨论】:
以上是关于Cloudinary\Error:缺少必需的参数 - 文件 - Express 和 Postman的主要内容,如果未能解决你的问题,请参考以下文章