UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

134 lines (127 loc) 4.54 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var fs = require('fs'); var http = require('http'); var path = require('path'); function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n["default"] = e; return Object.freeze(n); } var fs__namespace = /*#__PURE__*/_interopNamespace(fs); var http__namespace = /*#__PURE__*/_interopNamespace(http); var path__namespace = /*#__PURE__*/_interopNamespace(path); function postFile(fileDataInfo, fileKeyValue, options) { return new Promise(function (resolve, reject) { if (!options) { console.log('[publish] failed. 需要 options'); return; } var req = http__namespace.request(options, function (res) { // res.setEncoding("utf8"); res.on('data', function (chunk) { var result = {}; try { result = JSON.parse(chunk); } catch (_a) {} console.log('[postFile] result: ', result); resolve(result); }); }); req.on('error', function (e) { console.log("[postFile] problem with request: ".concat(e.message)); reject(e); }); var boundaryKey = Math.random().toString(16); var endData = "\r\n----".concat(boundaryKey, "--"); var dataLength = 0; var dataArr = []; for (var _i = 0, fileDataInfo_1 = fileDataInfo; _i < fileDataInfo_1.length; _i++) { var item = fileDataInfo_1[_i]; var dataInfo = "\r\n----".concat(boundaryKey, "\r\n") + "Content-Disposition: form-data; name=\"".concat(item.urlKey, "\"\r\n\r\n").concat(item.urlValue); var dataBinary = Buffer.from(dataInfo, 'utf-8'); dataLength += dataBinary.length; dataArr.push({ dataInfo: dataInfo }); } var files = []; for (var _a = 0, fileKeyValue_1 = fileKeyValue; _a < fileKeyValue_1.length; _a++) { var item = fileKeyValue_1[_a]; var content = "\r\n----".concat(boundaryKey, "\r\n") + 'Content-Type: application/octet-stream\r\n' + "Content-Disposition: form-data; name=\"".concat(item.urlKey, "\"; filename=\"").concat(path__namespace.basename(item.urlValue), "\"\r\n") + 'Content-Transfer-Encoding: binary\r\n\r\n'; // 当编码为ascii时,中文会乱码。 var contentBinary = Buffer.from(content, 'utf-8'); files.push({ contentBinary: contentBinary, filePath: item.urlValue }); } var contentLength = 0; for (var _b = 0, files_1 = files; _b < files_1.length; _b++) { var item = files_1[_b]; var filePath = item.filePath; if (fs__namespace.existsSync(filePath)) { var stat = fs__namespace.statSync(filePath); contentLength += stat.size; } else { contentLength += Buffer.from('\r\n', 'utf-8').length; } contentLength += item.contentBinary.length; } req.setHeader('Content-Type', "multipart/form-data; boundary=--".concat(boundaryKey)); req.setHeader('Content-Length', dataLength + contentLength + Buffer.byteLength(endData)); // 将参数发出 for (var _c = 0, dataArr_1 = dataArr; _c < dataArr_1.length; _c++) { var item = dataArr_1[_c]; req.write(item.dataInfo); } var fileIndex = 0; var _doOneFile = function doOneFile() { req.write(files[fileIndex].contentBinary); var currentFilePath = files[fileIndex].filePath; if (fs__namespace.existsSync(currentFilePath)) { // @ts-ignore var fileStream = fs__namespace.createReadStream(currentFilePath, { bufferSize: 4 * 1024 }); fileStream.pipe(req, { end: false }); fileStream.on('end', function () { fileIndex += 1; if (fileIndex === files.length) { req.end(endData); } else { _doOneFile(); } }); } else { req.write('\r\n'); fileIndex += 1; if (fileIndex === files.length) { req.end(endData); } else { _doOneFile(); } } }; if (fileIndex === files.length) { req.end(endData); } else { _doOneFile(); } }); } exports.postFile = postFile;