Если я проверю ваш код, как показано ниже, я получу правильный ответ, например, «Файл должен быть изображением».если я пытаюсь загрузить файл .gif.
const request = require("request");
const fs = require("fs");
const options = {
method: "POST",
url: "http://localhost:3300/upload-ad",
headers: {
"Content-Type": "multipart/form-data"
},
formData : {
"image" : fs.createReadStream("./test.gif")
}
};
request(options, function (err, res, body) {
if(err) console.log(err);
console.log(body);
});
Это работает, потому что в этом случае мы устанавливаем поле Content-Disposition.Я подозреваю, что с вами происходит то, что, возможно, клиент не устанавливает этот заголовок или он был установлен неправильно.Например, если мы изменили имя файла с «test.gif» на «test.jpg», это успешно загрузилось бы, несмотря на то, что на самом деле это изображение в формате GIF.
В моем случае начало загрузки выглядит так:
----------------------------321622124424983663382061
Content-Disposition: form-data; name="image"; filename="test.gif"
Content-Type: image/gif
И все работает так, как положено.
Я бы порекомендовал, возможно, не доверять полю имени файла в POST и фактически проверить, что на самом деле представляет собой изображение, посмотрев назагруженный буфер.