Diposting di Oschina, itu milikku, dan sekarang ada di sini, haha
Kode ini hanya dapat mengunggah satu file sekaligus ~~
Salinan kode adalah sebagai berikut:
var path = membutuhkan ("path");
var fs = membutuhkan ("fs");
var http = membutuhkan ("http");
// Posting Nilai Posting
var getfield = function (bidang, nilai) {
Return 'Disposisi Konten: Formulir-Data; name = "'+Field+'"/r/n/r/n'+nilai+'/r/n';
}
// File Payload
var getFieldhead = function (bidang, nama file) {
var filefieldhead = 'Disposisi konten: Formulir-data; "'+Field+'"; /n/r/n ';
mengembalikan Filefieldhead;
}
// Dapatkan pantomim
var getMime = fungsi (nama file) {
var mimes = {
'.png': 'image/png',
'.gif': 'gambar/gif',
'.jpg': 'gambar/jpeg',
'.jpeg': 'gambar/jpeg',
'.js': 'aplikasi/json',
'.torrent': 'Aplikasi/Octet-Stream'
};
var ext = path.extName (nama file);
var mime = mime [ext];
mime = !! mime? mime: 'aplikasi/oktet-stream';
mengembalikan pantomim;
}
// Dapatkan batasan batas string acak
var getBoundary = function () {
var max = 9007199254740992;
var dec = math.random () * max;
var hex = dec.tostring (36);
var batas = hex;
batas pengembalian;
}
// Dapatkan batas
var getBoundaryBorder = function (batas) {
return '-'+batas+'/r/n';
}
// pemformatan lapangan
fungsi fieldpayload (opts) {
var payload = [];
untuk (var id di opts.field) {
payload.push (getfield (id, opts.field [id]));
}
payload.push ("");
return payload.join (getBoundaryBorder (opts.boundary));
}
// Posting data
fungsi postrequest (opts) {
filereadStream (opts, function (buffer) {
var options = membutuhkan ('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;
Header ["content-length"] = buffer.bytelength (h+e+a+d)+buffer.length;
Header ["tipe konten"] = 'multipart/form-data;
option.headers = header;
options.method = 'post';
var req = http.Request (option, 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 (buffer);
req.end (d);
});
}
// Baca file
fungsi filereadstream (opts, fn) {
var readStream = fs.createreadStream (opts.file, {flags: 'r', encoding: null});
var chunks = [];
panjang var = 0;
readStream.on ('data', function (chunk) {
panjang += chunk.length;
chunks.push (chunk);
});
readStream.on ('end', function () {
var buffer = buffer baru (panjang);
untuk (var i = 0, pos = 0, size = chunks.length; i <size; i ++) {
potongan [i] .copy (buffer, pos);
pos += potongan [i] .length;
}
fn (buffer);
});
}
// semua jenis pengaturan
var opt = {
"url": "http: //xxxx.xx", // url
"File": "00.jpg", // Lokasi file
"Param": "File", // File Unggah Nama Bidang
"Field": {// sisa bidang pos
"Klien": "1",
"judul": "ok"
},
"Boundary": "---- WebKitFormBoundary"+getBoundary ()
}
Postrequest (opt);
/*
----- webkitformboundaryuzkmkaovuuysq1dt/r/n
Disposisi Konten: Formulir-Data; "File";
Jenis konten: Aplikasi/Octet-Stream
/r/n
/r/n +file/r/n
----- webkitformboundaryuzkmkaovuuysq1dt/r/n
Disposisi Konten: Formulir-Data; "FieldName"
/r/n
/r/n +nilai/r/n
----- webkitformboundaryuzkmkaovuuysq1dt--
*/
Komentar terakhir adalah bahwa format standar "/r/n" mewakili string yang sebenarnya.