123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- var fs = require("fs");
- var http = require("http");
- var path = require("path");
- function getReq(options) {
- var options = options || {
- host: "localhost",
- port: "5000",
- method: "POST",
- path: "/upload"
- };
- var req = http.request(options, function(res) {
- console.log("RES:" + res);
- console.log("STATUS: " + res.statusCode);
- console.log("HEADERS: " + JSON.stringify(res.headers));
- res.on("data", function(chunk) {
- console.log("BODY:" + chunk);
- });
- });
- req.on("error", function(e) {
- console.log("problem with request:" + e.message);
- console.log(e);
- });
- return req;
- }
- function readFileList (_path, filesList) {
- var stat = fs.statSync(_path);
- if(stat.isDirectory()) {
- var files = fs.readdirSync(_path);
- files.forEach(function (itm, index) {
- var stat = fs.statSync(_path + "/" + itm);
- if (stat.isDirectory()) {
- readFileList(_path + "/" + itm, filesList) //递归读取文件
- }
- else {
- var obj = {};
- obj.urlKey = itm
- obj.urlValue = _path + "/" + itm; //全路径
- filesList.push(obj);
- }
- })
- }
- else {
- var pathObj = path.parse(_path);
- var obj = {};
- obj.urlKey = pathObj.base;
- obj.urlValue = _path;
- filesList.push(obj);
- }
- }
- /**
- * 获取文件列表
- */
- var listFiles = (_path) => {
- var filesList = [];
- readFileList(_path, filesList);
- return filesList;
- }
- /**
- * 上传文件
- */
- var sendFiles = (fileKeyValue, options) => {
- var req = getReq(options);
- var boundaryKey = Math.random().toString(16);
- var enddata = "\r\n----" + boundaryKey + "--";
- var files = new Array();
- for (var i = 0; i < fileKeyValue.length; i++) {
- var content =
- "\r\n----" +
- boundaryKey +
- "\r\n" +
- "Content-Type: application/octet-stream\r\n" +
- 'Content-Disposition: form-data; name="' +
- fileKeyValue[i].urlKey +
- '"; filename="' +
- path.basename(fileKeyValue[i].urlValue) +
- '"\r\n' +
- "Content-Transfer-Encoding: binary\r\n\r\n";
- //当编码为ascii时,中文会乱码。
- var contentBinary = new Buffer(content, "utf-8");
- files.push({
- contentBinary: contentBinary,
- filePath: fileKeyValue[i].urlValue
- });
- }
- var contentLength = 0;
- for (var i = 0; i < files.length; i++) {
- var stat = fs.statSync(files[i].filePath);
- contentLength += files[i].contentBinary.length;
- contentLength += stat.size;
- }
- req.setHeader(
- "Content-Type",
- "multipart/form-data; boundary=--" + boundaryKey
- );
- req.setHeader("Content-Length", contentLength + Buffer.byteLength(enddata));
- //将参数发出
- var fileindex = 0;
- var doOneFile = function() {
- req.write(files[fileindex].contentBinary);
- var fileStream = fs.createReadStream(files[fileindex].filePath, {
- bufferSize: 4 * 1024
- });
- fileStream.pipe(req, { end: false });
- fileStream.on("end", function() {
- fileindex++;
- if (fileindex == files.length) {
- req.end(enddata);
- } else {
- doOneFile();
- }
- });
- };
- if (fileindex == files.length) {
- req.end(enddata);
- }
- else {
- doOneFile();
- }
- }
- module.exports = {
- 'listFiles' : listFiles,
- 'sendFiles' : sendFiles
- }
- /**
- //读取文件列表
- let files = [];
- readFileList("/Users/siena/Desktop/image", files);
- //上传文件
- postFile(files, getReq());
- */
|