запрос multipart / form-data не выполнен. Поток неожиданно закончился - PullRequest
0 голосов
/ 16 января 2019

Я отправляю данные из приложения nodejs в конечную точку покоя пружины. Я следовал примеру с form-data до fs.createReadStream из файла, и это нормально. Но так как мое приложение генерирует эти данные, мне действительно нужно отправить данные, которые хранятся в переменной (в виде строки). Поэтому я следовал этому ответу , чтобы создать поток из строки, но на стороне Java я получаю сообщение об ошибке «Поток неожиданно завершился».

var form = new FormData();
form.append('id', id);

// this works
//form.append('inputFiles[]', fs.createReadStream('test.xml'));

//this does not
const Readable = require('stream').Readable;
let s = new Readable();
s._read = () => {};
s.push('some data generated by my application');
s.push(null);

form.append('inputFiles[]', s);

form.submit(url, function(error, result) {
  if (error) {
    console.log('Error!');
  }
});

Нужно ли как-нибудь передать эти данные? Или укажите длину содержимого (если да, как мне определить длину?) Я попытался добавить { filename : 'test.xml', contentType: 'application/xml' } к читаемому, чтобы, возможно, имитировать файл, но все равно получаю ту же ошибку.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

В случае, если кто-то еще столкнется с той же проблемой - мне нужно было иметь все 3 дополнительных поля, включая известные Длина

    let stream = new Readable();
    stream.push(foo);
    stream.push(null);
    form.append('inputFiles[]', stream, {
      filename : 'test.xml',
      contentType: 'application/xml',
      knownLength: foo.length
    }); //extra fields necessary
0 голосов
/ 16 января 2019

Могу ли я предложить другой подход? Поскольку вы используете ответ с 2014 года ...

let form = new FormData();
                form.append('fieldName', 'fileBuffer/DataString', 'fileName');

                axios.post('url', form, {
                    headers: {
                        'Content-Type': `multipart/form-data; boundary=${form._boundary}`
                    }
                }).then((res) => {
                    console.log(res.data);
                    res.json(responseFromServer.data);
                }).catch((err) => {
                    res.status(400).send(err);
                });
...