Oschinaに投稿しました、それは私のものです、そして今それはここにあります、笑
このコードは一度に1つのファイルのみをアップロードできます~~
コードコピーは次のとおりです。
var path = require( "path");
var fs = require( "fs");
var http = require( "http");
//値ペイロードを投稿します
var getfield = function(field、value){
return 'content-disposition:form-data = "'+field+'"/r/n'+value+'/r/n'
}
//ファイルペイロード
var getfieldhead = function(field、filename){
var filefieldhead = 'content-disposition:form-data; /n/r/n ';
filefieldheadを返します。
}
// mimeを取得します
var getmime = function(filename){
var mimes = {
'.png': 'image/png'、
'.gif': 'image/gif'、
'.jpg': 'image/jpeg'、
'.jpeg': 'image/jpeg'、
'.js': 'アプリケーション/json'、
'.torrent': 'アプリケーション/オクテットストリーム'
};
var ext = path.extname(filename);
var mime = mimes [ext];
mime = !! mime?mime: 'application/octet-stream';
マイムを返します。
}
//境界チェックランダム文字列を取得します
var getBoundary = function(){
var max = 9007199254740992;
var dec = math.random() * max;
var hex = dec.tostring(36);
var境界= hex;
境界を返す;
}
//境界を取得します
var getBoundaryborder = function(boundary){
return ' - '+boundary+'/r/n';
}
//フィールドフォーマット
function fieldpayload(opts){
var payload = [];
for(opts.fieldのvar id){
payload.push(getfield(id、opts.field [id]));
}
payload.push( "");
return payload.join(getBoundaryborder(opts.boundary));
}
//データを投稿します
function postre -equest(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;
Header ["content-length"] = buffer.bytelength(h+e+a+d)+buffer.length;
ヘッダー["Content-Type"] = 'MultiPart/form-data;
options.headers = header;
options.method = 'post';
var req = http.request(options、function(res){
var data = '';
res.on( 'data'、function(chunk){
データ+= 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'、encoding:null});
var chunks = [];
var length = 0;
readstream.on( 'data'、function(chunk){
長さ += chunk.length;
chunks.push(chunk);
});
readstream.on( 'end'、function(){
varバッファー=新しいバッファー(長さ);
for(var i = 0、pos = 0、size = chunks.length; i <size; i ++){
チャンク[i] .copy(buffer、pos);
pos += chunks [i] .length;
}
fn(バッファー);
});
}
//あらゆる種類の設定
var opt = {
「url」: "http://xxxx.xx"、// url
「ファイル」:「00.jpg」、//ファイルの場所
"param": "file"、//ファイルフィールド名をアップロードします
「フィールド」:{//残りのポストフィールド
「クライアント」:「1」、
「タイトル」:「OK」
}、
「境界」: "---- webkitformboundary"+getBoundary()
}
Postrequest(opt);
/*
----- webkitformboundaryuzkmkaovuysq1dt/r/n
コンテンツ拡張:form-data;
コンテンツタイプ:アプリケーション/オクテットストリーム
/r/n
/r/n +file/r/n
----- webkitformboundaryuzkmkaovuysq1dt/r/n
コンテンツ拡張:form-data;
/r/n
/r/n +値/r/n
----- webkitformboundaryuzkmkaovuuysq1dt--
*/
最後のコメントは、標準の形式「/r/n」が実際の文字列を表すため、視覚的に調整されます。