Опубликовано на Ошине, это мое, и теперь это здесь, ха -ха
Этот код может загружать только один файл за раз ~~
Кода -копия выглядит следующим образом:
var path = require ("path");
var fs = require ("fs");
var http = require ("http");
// публикация стоимости полезной нагрузки
var getfield = function (field, value) {
вернуть '-контент-дискуссию: form-data;
}
// полезная нагрузка файла
var getfieldhead = function (field, filename) {
var filefieldhead = 'content-disposition: form-data; /n/r/n ';
вернуть FileFieldhead;
}
// Получить Mime
var getMime = function (имя файла) {
var mimes = {
'.png': 'image/png',
'.gif': 'Image/Gif',
'.jpg': 'image/jpeg',
'.jpeg': 'Image/jpeg',
'.js': 'Application/json',
'.torrent': 'Приложение/октябрь
};
var ext = path.extname (имя файла);
var mime = mimes [ext];
mime = !! mime? Mime: 'Заявление/октябрь-поток';
вернуть миме;
}
// Получить граничную проверку случайной строки
var getBoundary = function () {
var max = 9007199254740992;
var dec = math.random () * max;
var hex = dec.tostring (36);
var Boundary = hex;
вернуть границу;
}
// получить границу
var getBoundaryBorder = function (граница) {
вернуть '-'+граница+'/r/n';
}
// форматирование поля
Функция FieldPayload (Opts) {
var payload = [];
для (var id in opts.field) {
pailload.push (getfield (id, opts.field [id]));
}
PAYLOAD.PUSH ("");
return payload.join (getBoundaryBorder (Opts.Boundary));
}
// публиковать данные
Функция Postrequest (Opts) {
FileReadStream (opts, function (buffer) {
var options = require ('url'). parse (opts.url);
var Header = {};
var H = getBoundaryBorder (Opts.Boundary);
var e = fieldpayload (opts);
var a = getfieldhead (opts.param, opts.file);
var d = "/r/n"+h;
Заголовок ["Длина контента"] = buffer.bytelength (h+e+a+d)+buffer.length;
Заголовок ["Контент-тип"] = 'Multipart/Form-Data;
Options.Headers = заголовок;
options.method = 'post';
var req = http.request (options, function (res) {
var data = '';
res.on ('data', function (chunk) {
data+= Chunk;
});
res.on ('end', function () {
console.log (res.statuscode)
console.log (data);
});
});
req.write (h+e+a); log.diy (h+e+a+buffer+d);
req.write (буфер);
req.end (d);
});
}
// Читать файл
Функция FileReadStream (opts, fn) {
var readstream = fs.createreadstream (opts.file, {flags: 'r', кодирование: null});
var Chunks = [];
var длина = 0;
readstream.on ('data', function (chunk) {
длина += chunk.length;
кусочки. Push (Chunk);
});
readstream.on ('end', function () {
var buffer = новый буфер (длина);
для (var i = 0, pos = 0, size = chunks.length; i <size; i ++) {
кусочки [i] .copy (buffer, pos);
pos += кусочки [i] .length;
}
fn (буфер);
});
}
// все виды настройки
var opt = {
«URL»: «http: //xxxx.xx», // url
«Файл»: «00.jpg», // местоположение файла
"Param": "File", // Имя поля файла загрузки
«Поле»: {// остальные посты
"Клиент": "1",
"Название": "ОК"
},
"Граница": "---- webkitformboundary"+getBoundary ()
}
postrequest (opt);
/*
----- webkitformboundaryuzkmkaovuuysq1dt/r/n
Контент-дискуссия: Form-Data;
Контент-тип: приложение/октябрь
/r/n
/r/n +файл/r/n
----- webkitformboundaryuzkmkaovuuysq1dt/r/n
Контент-дискуссия: форм-дата;
/r/n
/r/n +значение/r/n
----- webkitformboundaryuzkmkaovuuysq1dt--
*/
Последний комментарий состоит в том, что стандартный формат "/r/n" представляет фактическую строку.