UNPKG

t-comm

Version:

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

108 lines (105 loc) 3.7 kB
import * as fs from 'fs'; import * as http from 'http'; import * as path from 'path'; function postFile(fileDataInfo, fileKeyValue, options) { return new Promise(function (resolve, reject) { if (!options) { console.log('[publish] failed. 需要 options'); return; } var req = http.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.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.existsSync(filePath)) { var stat = fs.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.existsSync(currentFilePath)) { // @ts-ignore var fileStream = fs.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(); } }); } export { postFile };