>  기사  >  웹 프론트엔드  >  Node.js 시뮬레이션 브라우저 파일 업로드 example_javascript 기술

Node.js 시뮬레이션 브라우저 파일 업로드 example_javascript 기술

WBOY
WBOY원래의
2016-05-16 16:54:251310검색

OSChina에 올렸는데 그것도 내꺼인데 여기에 올려요 ㅎㅎ ​​

이 코드는 한 번에 하나의 파일만 업로드할 수 있습니다~~

코드 복사 코드는 다음과 같습니다.

var path=require("path")
var fs=require(" fs");
var http=require("http");

//게시 값 페이로드
var getfield=function(field, value) {
return 'Content-Disposition: form-data; name="' 필드 '"rnrn' 값 'rn'
}

//파일 페이로드
var getfieldHead=function (필드, 파일 이름) {
var fileFieldHead ='콘텐츠 처리: 양식-데이터 이름="' 필드 '"; 파일 이름 '"rn' '콘텐츠 유형: ' getMime(filename) 'rnrn'
return fileFieldHead; }
//Get Mime
var getMime=function (filename) {
var mimes = {
'.png': 'image/png',
'.gif': 'image /gif',
' .jpg': 'image/jpeg',
'.jpeg': 'image/jpeg',
'.js': 'application/json',
' .torrent': 'application/octet -stream'
};
var ext = path.extname(filename);
var mime = mimes[ext]
mime=!!mime?mime :'application/octet-stream' ;
return mime;
}
//경계 확인 무작위 문자열 가져오기
var getBoundary=function() {
var max = 9007199254740992; >var dec = Math.random() * max;
var hex = dec.toString(36);
var border = hex;
}
//경계 가져오기
var getBoundaryBorder=function (boundary ) {
return '--' 경계 'rn'
}
//필드 형식 지정
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));
}

//post data
function 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="rn" h
Header["Content-Length"]=Buffer.byteLength(he a d ) buffer.length;
헤더["Content-Type"]='multipart/form-data; 경계=' opts.boundary
options.headers=Header; ;
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(he a buffer d);
req.end(d)
}; 🎜>
}
//파일 읽기
function filereadstream(opts, fn) {
var readstream = fs.createReadStream(opts.file,{flags:'r',encoding:null}) ;
var Chunks= [];
var length = 0;
readstream.on('data', function(chunk) {
length =chunk.length;
chunks.push( Chunk);
} );
readstream.on('end', function() {
var buffer = new Buffer(length);
for(var i = 0, pos = 0, size = 덩어리.길이; i < 크기; i ) {
chunks[i].copy(buffer, pos)
pos = 덩어리[i].length; buffer);
} );
}

//다양한 설정
var opt={
"url":"http://xxxx.xx",//url
"file":"00.jpg",//파일 위치
"param":"file",//파일 업로드 필드 이름
"field":{//기타 게시물 필드
"client":"1 ",
"title":"ok"
},
"boundary":"----WebKitFormBoundary" getBoundary()
}

postRequest(opt);
/*
------WebKitFormBoundaryuzKmkAovUuYsQ1Dtrn

콘텐츠 처리: form-data; filename="00.jpg"rn
컨텐트 유형: 애플리케이션 /옥텟-스트림
rn
rn 파일

------WebKitFormBoundaryuzKmkAovUuYsQ1Dtrn

컨텐트 처리: form-data name="fieldName" "
rn
rn valuern

------WebKitFormBoundaryuzKmkAovUuYsQ1Dt--
*/


마지막 설명은 표준 형식입니다." n"은 실제 문자열을 나타냅니다. 보기 편하도록 시각적으로도 조정됩니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.