Я столкнулся с этой проблемой, когда superagent неправильно прикрепляет файл или буфер к запросу, и причина, которую я назвал пустым, связана с тем, что данные формы выглядят следующим образом:
------WebKitFormBoundaryy6T3XReWRFT1KfFm
Content-Disposition: form-data; name="media"
------WebKitFormBoundaryy6T3XReWRFT1KfFm--
В файле нет никакой информации, и он выглядит пустым media:
Код, который я использую, прост:
.post(`${API_ROOT}${url}`)
.withCredentials()
.attach('media', body.media, 'filename.jpg')
Где body.media
:
asBuffer(file, callback) {
const reader = new FileReader();
reader.addEventListener('load', () => callback(reader.result));
reader.readAsDataURL(file);
}
asBuffer(file, ((b) => {
body.media = b;
}));
или
body.media = new FormData();
body.media.append('file', inputFile, inputFileName);
или вместе с после asBuffer
Buffer.from(body.media, 'base64');
, где inputFile
имеет тип File
.
Я также поиграл с attach
и пропустил имя файла, когда body.media
не было типа Buffer
.
Я не верю, что с моей стороны есть проблема, поскольку использование .send(body.media)
на самом деле прикрепляет файл к данным формы запроса, и я вижу его на внутреннем сервере. Только функция .attach()
не работает должным образом, и мне это нужно, так как мне также нужно отправлять поля.
Единственный обходной путь, который я нашел в этот момент, был следующим:
const mediaFile = body.media;
delete body.media;
.post(...)
.withCredentials()
.query(body)
.send(mediaFile)
и я на самом деле не чувствую себя комфортно, получая огромный URL, чтобы иметь возможность отправить файл вместе с моими полями.
Я уже видел некоторые проблемы, подобные этой, уже опубликованные, но, похоже, ни у одной из них не было ответа.