Мне нужно отправить данные POST на сервер с nw.js. Данные объединяют простые пары имя-значение и один файл, т. Е. Тип запроса - multipart/form-data
. Все данные должны отправляться по одному запросу.Запрос на многостраничный/форма-данные от nw.js
Я использую XMLHttpRequest и FormData для отправки моих данных. Код:
function toArrayBuffer(buffer) { // convert Node's Buffer to ArrayBuffer
var ab = new ArrayBuffer(buffer.length);
var view = new Uint8Array(ab);
for (var i = 0; i < buffer.length; ++i) {
view[i] = buffer[i];
}
return ab;
}
var fData = new global.window.FormData();
fData.append('email', email);
fData.append('foo', 'bar'); // some plain data;
var fs = require('fs');
var buff;
fs.readFile(data.path, function (err, data) { // data.path contents full path to the file
if(err) {
console.log('file reading error');
// handling a errors
}else{
console.log('reading complete');
buff = data; // buffer contains data, checked
send();
};
});
function send() {
var blob = new global.window.Blob([toArrayBuffer(buff)], { type:'image/jpeg' }); // here is a problem, I think
fData.append('file', blob);
// I've tried some cases:
// var blob = new Blob(toArrayBuffer(buff), { type:'image/jpeg' }); //without array braces it throws a error: The 1st argument provided is either null, or an invalid Array object.
// var blob = new Blob(buff, { type:'image/jpeg' }); // directly, same error
var xhr = new global.window.XMLHttpRequest();
xhr.open("POST", url);
xhr.timeout = 30000;
xhr.onload = xhr.onerror = function() {
// handling result or errors...
};
xhr.send(fData);
}
XMLHttpRequest отправляет все данные, кроме файла. Вот запрос полезной нагрузки:
------WebKitFormBoundaryc0ClIBTxPlqPmilD
Content-Disposition: form-data; name="email"
email
------WebKitFormBoundaryc0ClIBTxPlqPmilD
Content-Disposition: form-data; name="message_id"
4b38ad18-0501-9c0d-9cf6-e0a2fcca1898
------WebKitFormBoundaryc0ClIBTxPlqPmilD
Content-Disposition: form-data; name="foo"
bar
------WebKitFormBoundaryc0ClIBTxPlqPmilD
Content-Disposition: form-data; name="file"; filename="blob"
Content-Type: image/jpeg
------WebKitFormBoundaryc0ClIBTxPlqPmilD--
Раздел файла пуст.
Я также попытался передать буфер непосредственно в FormData. В этом случае файл отправляет, но сервер не распознает файл как файл - вместо этого он помещает файл в строку (обычный сервер PHP).
Благодаря
Привет Дмитрий, вы ее решаете? – bedna
@bedna yes, написал ответ ниже – Dmitry