//doHttpPost('localhost', 8000, '/TestPost', 'string' , 'TestTestTestTest', false); //doHttpPost('localhost', 8000, '/TestPost', 'file' , '/Users/chengwei/Downloads/grid1.png', true); function doHttpPost(_host, _port, _path, name, value, isFile, fileEncoding) { var http = require('http'), fs = require('fs'), path = require('path'), boundary = Math.random(), postData, postOptions, postRequest; if (isFile) { var fileName = path.basename(value), encoding = fileEncoding?fileEncoding:'binary', dataLength = 0, fileContents = '', fileReader; postData = []; postData.push(new Buffer(EncodeFilePart(boundary, 'application/octet-stream', name, fileName), 'ascii')); fileReader = fs.createReadStream(value, {'encoding': encoding}); fileReader.on('data', function(data) { fileContents += data; }); fileReader.on('end', function() { postData.push(new Buffer(fileContents, encoding)); postData.push(new Buffer("\r\n--" + boundary + "--"), 'ascii'); // Calculate data length for(var i = 0; i < postData.length; i++) { dataLength += postData[i].length; } postOptions = { 'host': _host, 'port': _port, 'path': _path, 'method': 'POST', 'headers' : { 'Content-Type' : 'multipart/form-data; boundary=' + boundary, 'Content-Length' : dataLength } }; postRequest = http.request(postOptions, function(response){ response.setEncoding('utf8'); response.on('data', function(chunk) { // Respond to http response console.log(chunk); }); response.on('end', function() { // Respond to http response console.log('send ' + value); }); }); for (var i = 0; i < postData.length; i++) { postRequest.write(postData[i]); } postRequest.end(); }); } else { postData = ''; postData += EncodeFieldPart(boundary, name, value); postData += '--' + boundary + '--'; postOptions = { 'host': _host, 'port': _port, 'path': _path, 'method': 'POST', 'headers' : { 'Content-Type' : 'multipart/form-data; boundary=' + boundary, 'Content-Length' : postData.length } }; postRequest = http.request(postOptions, function(response){ response.setEncoding('utf8'); response.on('data', function(chunk) { // Respond to http response console.log(chunk); }); response.on('end', function() { // Respond to http response console.log('send ' + value); }); }); postRequest.write(postData); postRequest.end(); } function EncodeFieldPart(boundary,name,value) { var return_part = "--" + boundary + "\r\n"; return_part += "Content-Disposition: form-data; name=\"" + name + "\"\r\n\r\n"; return_part += value + "\r\n"; return return_part; } function EncodeFilePart(boundary,type,name,filename) { var return_part = "--" + boundary + "\r\n"; return_part += "Content-Disposition: form-data; name=\"" + name + "\"; filename=\"" + filename + "\"\r\n"; return_part += "Content-Type: " + type + "\r\n\r\n"; return return_part; } }