Gepostet auf Oschina, das ist meins, und jetzt ist es hier, haha
Dieser Code kann jeweils nur eine Datei hochladen ~~
Die Codekopie lautet wie folgt:
var path = require ("path");
var fs = require ("fs");
var http = required ("http");
// Wertnutzlast posten
var getfield = Funktion (Feld, Wert) {
Return 'Inhaltsdisposition: Form-Data;
}
// Nutzlast Datei
var getfieldhead = Funktion (Feld, Dateiname) {
var Filefieldhead = 'Inhaltsdisposition: Form-Data; /n/r/n ';
Rückgabe von Dateifieldhead;
}
// Mime bekommen
var getMime = function (Dateiname) {
var mimes = {
'.png': 'Bild/png',
'.gif': 'Bild/Gif',,
'.jpg': 'Image/jpeg',,
'.Jpeg': 'Image/JPEG',,
'.js': 'application/json',
'.Torrent': 'Anwendung/Oktettstrom'
};
var ext = path.extName (Dateiname);
var mime = mimes [ext];
mime = !! mime? mime: 'application/octet-stream';
Mime zurück;
}
// Holen Sie sich die Randing -Überprüfung zufälliger Zeichenfolge
var getboundary = function () {
var max = 9007199254740992;
var dec = math.random () * max;
var hex = dec.toString (36);
var boundary = hex;
Renditegrenze;
}
// Grenze bekommen
var getboundaryBorder = Funktion (Grenze) {
return '-'+bloße+'/r/n';
}
// Feldformatierung
Funktion fieldPayload (opts) {
var payload = [];
für (var id in opts.field) {
payload.push (getfield (id, opts.field [id]));
}
payload.push ("");
return payload.join (getboundaryBorder (optts.boundary));
}
// Daten posten
Funktion poststrequest (opts) {
fileReadStream (opts, function (puffer) {
var options = require ('url'). parse (optts.Url);
var header = {};
var h = getBoundaryBorder (optts.boundary);
var e = fieldPayload (opts);
var a = getfieldhead (optts.param, opts.file);
var d = "/r/n"+h;
Header ["Inhaltslänge"] = buffer.ByTelength (h+e+a+d)+puffer.length;
Header ["Content-Type"] = 'Multipart/Form-Data;
Optionen.Headers = Header;
Optionen.Method = 'Post';
var req = http.request (Optionen, Funktion (res) {
var data = '';
res.on ('Daten', Funktion (Chunk) {
Daten+= Chunk;
});
res.on ('end', function () {
console.log (res.statuscode)
console.log (Daten);
});
});
req.write (h+e+a); log.diy (h+e+a+puffer+d);
Req.Write (Puffer);
Req.end (d);
});
}
// Lesen Sie die Datei
Funktion fileReadstream (opts, fn) {
var readStream = fs.createadStream (optts.file, {flags: 'r', codieren: null});
var talks = [];
var länge = 0;
ReadStream.on ('Data', Funktion (Chunk) {
Länge += Chunk.Length;
thunks.push (Chunk);
});
readStream.on ('end', function () {
var buffer = neuer Buffer (Länge);
für (var i = 0, pos = 0, size = stücke.length; i <size; i ++) {
Stücke [i] .Copy (Puffer, POS);
POS += Stücke [i] .Length;
}
fn (puffer);
});
}
// alle Arten von Einstellungen
var opt = {
"URL": "http: //xxxx.xx", // url
"Datei": "00.jpg", // Dateispeicherort
"Param": "Datei", // Datei -Upload -Feldname
"Feld": {// Der Rest der Postfelder
"Kunde": "1",
"Titel": "OK"
},
"Grenze": "---- webkitformboundary"+getboundary ()
}
postrequest (opt);
/*
----- webkitformboundaryuzkmkaovuuysq1dt/r/n
Inhaltsdisposition: Form-Data;
Inhaltstyp: Anwendung/Oktettstream
/r/n
/r/n +Datei/r/n
----- webkitformboundaryuzkmkaovuuysq1dt/r/n
Inhaltsdisposition: Formdaten; name = "Fieldname"
/r/n
/r/n +Wert/r/n
----- webkitformboundaryuzkmkaovuuysq1dt-
*/
Der letzte Kommentar ist, dass das Standardformat "/r/n" die tatsächliche Zeichenfolge darstellt, um bequem auszusehen, wird es auch visuell angepasst.