node require('http') 模块实现文件上传

let filedata = require("fs").readFileSync(res.data);
let filename = "gamepath.txt";

Content-Disposition: form-data; name="file"; filename="1.txt"
Content-Type: text/plain

let blob = new Blob([file.toString()]);
var myBlob = new Blob([file], {
  type: "text/plain",
});

let fileData = new FormData();
fileData.append("file", myBlob, "filename.txt");

console.log("file", file);
console.log(fileData.getAll("file")[0]);

debugger;

Axios.post(
  "http://xxx.com/upload/upload.php",
  fileData,
  {
    headers: {
      "Content-Type": "multipart/form-data",
    },
  }
)
  .then((res) => {
    debugger;
  })
  .catch((err) => {
  debugger;
});

upload(res.data);
POST http://xxx.com/upload/upload.php HTTP/1.1
User-Agent: PostmanRuntime/7.28.4
Accept: */*
Cache-Control: no-cache
Postman-Token: 6eb9a33d-bb75-4504-9447-865cde8e1ce6
Host: xxx
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: multipart/form-data; boundary=--------------------------083640736921080563941908
Content-Length: 10946

----------------------------083640736921080563941908
Content-Disposition: form-data; name="file"; filename="gamepath.txt"
Content-Type: text/plain

  ʾ    : ѹ           10.0.2.33514   װĿ¼:  汾  :10.0.2.33514 ͼ  Ŀ¼:E:\sougou\SogouExplorer\SogouExplorer.exe  ܹ :UnKnown keyname:SogouExplorer
  ʾ    :          0.0.1   װĿ¼:  汾  :0.0.1 ͼ  Ŀ¼:C:\Users\admin\AppData\Local\Programs\ttvpn\         .exe,0  ܹ :UnKnown keyname:793735d7-9670-5898-a329-be9cb5a31d33
  ʾ    :          0.0.1   װĿ¼:  汾  :0.0.1 ͼ  Ŀ¼:E:\ttvpn\         .exe,0  ܹ :UnKnown keyname:1fb8a7aa-e784-579d-a981-2142d5507b97
  ʾ    :360ѹ     װĿ¼:E:\Program Files (x86)\360\360zip  汾  :4.0.0.1390 ͼ  Ŀ¼:E:\Program Files (x86)\360\360zip\360zip.exe  ܹ :x86 keyname:360ѹ  
  ʾ    :360            װĿ¼:E:\360web\360Chrome\Chrome\Application  汾  :13.0.2290.0 ͼ  Ŀ¼:E:\360web\360Chrome\Chrome\Application\360chrome.exe  ܹ :UnKnown keyname:360Chrome
  ʾ    :Bing Wallpaper   װĿ¼:  汾  :1.0.9.8 ͼ  Ŀ¼:  ܹ :x86 keyname:{980089C2-9D7D-4438-8DAF-C695E82DF18D}
  ʾ    :demo 0.1.0   װĿ¼:  汾  :0.1.0 ͼ  Ŀ¼:C:\Users\admin\AppData\Local\Programs\demo\demo.exe,0  ܹ :UnKnown keyname:1c67fd43-2a5e-58a8-90f1-90ee1047e493
  ʾ    :Electron Fiddle   װĿ¼:C:\Users\admin\AppData\Local\electron-fiddle  汾  :0.28.1 ͼ  Ŀ¼:C:\Users\admin\AppData\Local\electron-fiddle\app.ico  ܹ :UnKnown keyname:electron-fiddle
  ʾ    :FlashFXP 5   װĿ¼:C:\Program Files (x86)\FlashFXP 5\  汾  :5.4.0.3970 ͼ  Ŀ¼:C:\Program Files (x86)\FlashFXP 5\FlashFXP.exe  ܹ :x86 keyname:FlashFXP 5
  ʾ    :Git version 2.20.1   װĿ¼:C:\Program Files\Git\  汾  :2.20.1 ͼ  Ŀ¼:C:\Program Files\Git\mingw64\share\git\git-for-windows.ico  ܹ :x64 keyname:Git_is1
  ʾ    :Google Chrome   װĿ¼:C:\Program Files (x86)\Google\Chrome\Application  汾  :101.0.4951.54 ͼ  Ŀ¼:C:\Program Files (x86)\Google\Chrome\Application\chrome.exe,0  ܹ :x86 keyname:Google Chrome
  ʾ    :Google Chrome Canary   װĿ¼:C:\Users\admin\AppData\Local\Google\Chrome SxS\Application  汾  :103.0.5051.0 ͼ  Ŀ¼:C:\Users\admin\AppData\Local\Google\Chrome SxS\Application\chrome.exe,4  ܹ :UnKnown keyname:Google Chrome SxS
  ʾ    :KuaJingVS 5.2.3   װĿ¼:  汾  :5.2.3 ͼ  Ŀ¼:E:\kuajingvs\KuaJingVS.exe,0  ܹ :x86 keyname:d8eca4f2-21e8-58bb-b7cb-99b4135d6325
  ʾ    :           װĿ¼:  汾  :11.0.0.1811 ͼ  Ŀ¼:C:\Users\admin\AppData\Roaming\Desktoplite\360DesktopLite.exe  ܹ :UnKnown keyname:360DesktopLite
  ʾ    :Microsoft Edge   װĿ¼:C:\Program Files (x86)\Microsoft\Edge\Application  汾  :101.0.1210.39 ͼ  Ŀ¼:C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe,0  ܹ :x86 keyname:Microsoft Edge
  ʾ    :Microsoft OneDrive   װĿ¼:  汾  :22.077.0410.0007 ͼ  Ŀ¼:C:\Users\admin\AppData\Local\Microsoft\OneDrive\22.077.0410.0007\OneDriveSetup.exe,-101  ܹ :UnKnown keyname:OneDriveSetup.exe
  ʾ    :Microsoft Update Health Tools   װĿ¼:  汾  :2.84.0.0 ͼ  Ŀ¼:  ܹ :x64 keyname:{29B15818-E79F-4AB0-8938-9410C807AD76}
  ʾ    :Microsoft Visual C++ 2010  x64 Redistributable - 10.0.40219   װĿ¼:  汾  :10.0.40219 ͼ  Ŀ¼:  ܹ :x64 keyname:{1D8E6291-B0D5-35EC-8441-6616F567A0F7}
  ʾ    :Microsoft Visual C++ 2010  x86 Redistributable - 10.0.40219   װĿ¼:  汾  :10.0.40219 ͼ  Ŀ¼:  ܹ :x86 keyname:{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
  ʾ    :Microsoft Visual C++ 2013 Redistributable (x64) - 12.0.30501   װĿ¼:  汾  :12.0.30501.0 ͼ  Ŀ¼:C:\ProgramData\Package Cache\{050d4fc8-5d48-4b8f-8972-47c82c46020f}\vcredist_x64.exe,0  ܹ :x86 keyname:{050d4fc8-5d48-4b8f-8972-47c82c46020f}
  ʾ    :Microsoft Visual C++ 2013 Redistributable (x86) - 12.0.30501   װĿ¼:  汾  :12.0.30501.0 ͼ  Ŀ¼:C:\ProgramData\Package Cache\{f65db027-aff3-4070-886a-0d87064aabb1}\vcredist_x86.exe,0  ܹ :x86 keyname:{f65db027-aff3-4070-886a-0d87064aabb1}
  ʾ    :Microsoft Visual C++ 2015-2022 Redistributable (x64) - 14.30.30704   װĿ¼:  汾  :14.30.30704.0 ͼ  Ŀ¼:C:\ProgramData\Package Cache\{57a73df6-4ba9-4c1d-bbbb-517289ff6c13}\VC_redist.x64.exe,0  ܹ :x86 keyname:{57a73df6-4ba9-4c1d-bbbb-517289ff6c13}
  ʾ    :Microsoft Visual C++ 2015-2022 Redistributable (x86) - 14.30.30704   װĿ¼:  汾  :14.30.30704.0 ͼ  Ŀ¼:C:\ProgramData\Package Cache\{4d8dcf8c-a72a-43e1-9833-c12724db736e}\VC_redist.x86.exe,0  ܹ :x86 keyname:{4d8dcf8c-a72a-43e1-9833-c12724db736e}
  ʾ    :Microsoft Visual Studio Code (User)   װĿ¼:E:\Microsoft VS Code\  汾  :1.67.0 ͼ  Ŀ¼:E:\Microsoft VS Code\Code.exe  ܹ :UnKnown keyname:{771FD6B0-FA20-440A-A002-3B3BAC16DC50}_is1
  ʾ    :Microsoft Visual Studio Installer   װĿ¼:"C:\Program Files (x86)\Microsoft Visual Studio\Installer"  汾  :2.11.52.58712 ͼ  Ŀ¼:"C:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe"  ܹ :x64 keyname:{6F320B93-EE3C-4826-85E0-ADF79F8D4C61}
  ʾ    :Microsoft Windows Desktop Runtime - 3.1.20 (x64)   װĿ¼:  汾  :3.1.20.30521 ͼ  Ŀ¼:C:\ProgramData\Package Cache\{7aba3ea9-cc4d-448f-8585-b260642964af}\windowsdesktop-runtime-3.1.20-win-x64.exe,0  ܹ :x86 keyname:{7aba3ea9-cc4d-448f-8585-b260642964af}
  ʾ    :Mozilla Firefox (x64 zh-CN)   װĿ¼:C:\Program Files\Mozilla Firefox  汾  :100.0 ͼ  Ŀ¼:C:\Program Files\Mozilla Firefox\firefox.exe,0  ܹ :x64 keyname:Mozilla Firefox 100.0 (x64 zh-CN)
  ʾ    :Mozilla Maintenance Service   װĿ¼:  汾  :80.0.1 ͼ  Ŀ¼:C:\Program Files (x86)\Mozilla Maintenance Service\Uninstall.exe,0  ܹ :x64 keyname:MozillaMaintenanceService
  ʾ    :Node.js   װĿ¼:  汾  :16.13.1 ͼ  Ŀ¼:C:\Windows\Installer\{F9421959-957E-4D50-857C-C6B8F44A5F07}\NodeIcon  ܹ :x86 keyname:{F9421959-957E-4D50-857C-C6B8F44A5F07}
  ʾ    :Notepad3 5.20.915.1   װĿ¼:D:\Notepad3\notepad\  汾  :5.20.915.1 ͼ  Ŀ¼:D:\Notepad3\notepad\Notepad3.exe  ܹ :x64 keyname:Notepad3_is1
  ʾ    :Npcap   װĿ¼:C:\Program Files\Npcap  汾  :1.55 ͼ  Ŀ¼:C:\Program Files\Npcap\uninstall.exe  ܹ :x86 keyname:NpcapInst
  ʾ    :NVIDIA ͼ           457.51   װĿ¼:C:\Program Files\NVIDIA Corporation\Installer2\Display.Driver.{B7127908-34BD-4690-90A3-B903B8650908}  汾  :457.51 ͼ  Ŀ¼:C:\Program Files\NVIDIA Corporation\Installer2\InstallerCore\NVI2.dll,0  ܹ :x64 keyname:{B2FE1952-0186-46C3-BAEC-A80AA35AC5B8}_Display.Driver
  ʾ    :Origin   װĿ¼:E:\Origin  汾  :10.5.112.50486 ͼ  Ŀ¼:E:\Origin\OriginUninstall.exe  ܹ :x86 keyname:Origin
  ʾ    :phpstudy   ɻ      װĿ¼:E:\phpstudy_pro\  汾  :8.1.1.2 ͼ  Ŀ¼:E:\phpstudy_pro\COM\phpstudy_pro.exe  ܹ :x86 keyname:phpstudy_pro_is1
  ʾ    :Postman-win64-8.11.1   װĿ¼:C:\Users\admin\AppData\Local\Postman  汾  :8.11.1 ͼ  Ŀ¼:  ܹ :UnKnown keyname:Postman
  ʾ    :PowerToys (Preview)   װĿ¼:E:\poweToys\  汾  :0.51.1 ͼ  Ŀ¼:C:\Windows\Installer\{DAA80B28-95F8-4E2C-BED4-3446474AEDA4}\powertoys.exe  ܹ :x64 keyname:{DAA80B28-95F8-4E2C-BED4-3446474AEDA4}
  ʾ    :Progress Telerik Fiddler   װĿ¼:E:\Program Files (x86)\Fiddler2  汾  :5.0.20204.45441 ͼ  Ŀ¼:"E:\Program Files (x86)\Fiddler2\App.ico"  ܹ :UnKnown keyname:Fiddler2
  ʾ    :PyCharm Community Edition 2021.1.1   װĿ¼:E:\PyCharm Community Edition 2021.1.1  汾  :211.7142.13 ͼ  Ŀ¼:E:\PyCharm Community Edition 2021.1.1\bin\pycharm64.exe  ܹ :x86 keyname:PyCharm Community Edition 2021.1.1
  ʾ    :Python 3.10.1 (64-bit)   װĿ¼:  汾  :3.10.1150.0 ͼ  Ŀ¼:C:\Users\admin\AppData\Local\Package Cache\{af822d5e-759c-4e77-9696-3cc835cd54a9}\python-3.10.1-amd64.exe,0  ܹ :UnKnown keyname:{af822d5e-759c-4e77-9696-3cc835cd54a9}
  ʾ    :Python 3.9.0 (64-bit)   װĿ¼:  汾  :3.9.150.0 ͼ  Ŀ¼:C:\Users\admin\AppData\Local\Package Cache\{a2a37ca0-8ebd-4d7e-b4b8-e6b1740c2ce0}\python-3.9.0-amd64.exe,0  ܹ :UnKnown keyname:{a2a37ca0-8ebd-4d7e-b4b8-e6b1740c2ce0}
  ʾ    :Python Launcher   װĿ¼:  汾  :3.10.7644.0 ͼ  Ŀ¼:C:\Windows\Installer\{7DE12550-BE09-44DD-BDB4-0EC26BA89DAF}\ARPIcon  ܹ :x86 keyname:{7DE12550-BE09-44DD-BDB4-0EC26BA89DAF}
  ʾ    :     е  ʵ    װĿ¼:  汾  :8.9 ͼ  Ŀ¼:E:\Dict\YoudaoDict.exe,0  ܹ :x86 keyname:     е  ʵ 
  ʾ    :    UU   װĿ¼:  汾  :4.22.0.50 ͼ  Ŀ¼:E:\Netease\UU\uu.exe  ܹ :x86 keyname:NeteaseGacc
  ʾ    :Steam   װĿ¼:  汾  :2.10.91.91 ͼ  Ŀ¼:E:\steam\uninstall.exe  ܹ :x86 keyname:Steam
  ʾ    :TortoiseSVN 1.14.0.28885 (64 bit)   װĿ¼:  汾  :1.14.28885 ͼ  Ŀ¼:C:\Windows\Installer\{7FB289B9-BA33-446A-A0E8-9BF59226A631}\TSVNIcon  ܹ :x64 keyname:{7FB289B9-BA33-446A-A0E8-9BF59226A631}
  ʾ    :Update for Windows 10 for x64-based Systems (KB5001716)   װĿ¼:  汾  :4.91.0.0 ͼ  Ŀ¼:  ܹ :x64 keyname:{82BD0A1C-815F-487F-9AE7-CE73DA413CFF}
  ʾ    :Visual Studio    ɹ    2019   װĿ¼:C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools  汾  :16.11.8 ͼ  Ŀ¼:C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\LaunchDevCmd.bat  ܹ :x86 keyname:25c39061
  ʾ    :Windows    Խ   ״        װĿ¼:  汾  :3.3.2110.22002 ͼ  Ŀ¼:  ܹ :x64 keyname:{ADECDDAB-3533-477B-B35B-B2DC3F34A7D4}
  ʾ    :Wireshark 3.6.2 64-bit   װĿ¼:E:\Wireshark  汾  :3.6.2 ͼ  Ŀ¼:E:\Wireshark\Wireshark.exe,0  ܹ :x86 keyname:Wireshark
  ʾ    :WPS Office (11.1.0.11636)   װĿ¼:  汾  :11.1.0.11636 ͼ  Ŀ¼:E:\Program Files (x86)\Kingsoft\WPS Office\ksolaunch.exe  ܹ :UnKnown keyname:Kingsoft Office
  ʾ    :    Transocks   װĿ¼:  汾  :3.2.6 ͼ  Ŀ¼:E:\transocks\transocks\Uninstall.exe  ܹ :x64 keyname:transocks
  ʾ    :΢ ſ    ߹    1.05.2111300   װĿ¼:  汾  :1.05.2111300 ͼ  Ŀ¼:E:\΢  web     ߹   \΢ ſ    ߹   .exe  ܹ :x86 keyname:΢ ſ    ߹   
  ʾ    :  Ѹ       0.3.6   װĿ¼:  汾  :0.3.6 ͼ  Ŀ¼:C:\Program Files (x86)\jixunjsq\  Ѹ      .exe,0  ܹ :x86 keyname:7165cfad-937f-5d61-9d29-5ecf722c8e36
  ʾ    :  Ѹ         ٰ 3.0   װĿ¼:  汾  :3.0.5.9 ͼ  Ŀ¼:E:\JiXunJsq\jixunjsqspl\Uninstall.exe  ܹ :x64 keyname:jixunjsq
  ʾ    :  Ѷ   μ        װĿ¼:  汾  :3.0.9672.134 ͼ  Ŀ¼:E:\tengxunjsq\QMProxyAccelerator\QMProxyAcceler.exe  ܹ :x86 keyname:QMProxyAccelerator
  ʾ    :  ѶQQ   װĿ¼:E:\QQ\  汾  :9.5.3.28008 ͼ  Ŀ¼:C:\Windows\Installer\{052CFB79-9D62-42E3-8A15-DE66C2C97C3E}\qq.ico  ܹ :x86 keyname:{052CFB79-9D62-42E3-8A15-DE66C2C97C3E}
  ʾ    :Զ         װĿ¼:C:\Users\admin\AppData\Local\Apps\Remote Desktop\  汾  :1.2.2606.0 ͼ  Ŀ¼:  ܹ :x64 keyname:{09DA1EF9-8EF9-41EA-95CD-79BD4EC857BE}
  ʾ    :       װĿ¼:  汾  :5.1.15-Release.24 ͼ  Ŀ¼:C:\Program Files (x86)\DingDing\main\current\logo.ico  ܹ :x86 keyname:    
  ʾ    :            װĿ¼:E:\LeiGod_Acc\  汾  :7.0.6.0 ͼ  Ŀ¼:E:\LeiGod_Acc\leigod.exe,0  ܹ :x64 keyname:BC3D821C-7EFA-41F8-B1C2-8A55DDFE5A67_is1

----------------------------083640736921080563941908
Content-Disposition: form-data; name="test"

1
----------------------------083640736921080563941908
Content-Disposition: form-data; name="test2"

222
----------------------------083640736921080563941908--

const http = require('http');
const https = require('https');
const fs = require('fs');
const URL = require('url');

const requestConfig = {
    hostname: 'xxx.com',
};

export function upload(payload, file) {
    let { url, method } = payload;
    let { filedata, filename } = file;


    //生成分隔数据
    // var boundaryKey = '----WebKitFormBoundaryjLVkbqXtIi0YGpaB';
    var boundaryKey = "----" + new Date().getTime();
    var formdata =
        "--" +
        boundaryKey +
        "\r\n" +
        `Content-Disposition:form-data; name="file"; filename="${filename}"\r\n` +
        "Content-Type:text/plain\r\n\r\n";
    formdata += filedata;
    formdata += "\r\n--" + boundaryKey + "--";


    let urlObj = URL.parse(url);
    let protocol = urlObj.protocol;

    let options = Object.assign({}, requestConfig, {
        hostname: urlObj.host ? urlObj.host : requestConfig.hostname,
        port: urlObj.port,
        path: urlObj.path,
        method: method,
    })

    return new Promise((resolve, reject) => {
        //发送请求
        var req = (protocol == 'http:' ? http : https).request(options, function (res) {
            let chunks = '';

            res.setEncoding('utf8');
            res.on('data', function (data) {
                chunks += data;
            });
            res.on('end', () => {
                try {
                    resolve(JSON.parse(chunks.toString()));
                } catch (error) {
                    resolve(chunks.toString());
                }
            })
        });

        req.on('error', function (e) {
            console.error("error:" + e);
        });

        //把boundary、要发送的数据大小以及数据本身写进请求
        req.setHeader('Content-Type', 'multipart/form-data; boundary=' + boundaryKey + '');
        req.setHeader('Content-Length', Buffer.byteLength(formdata, 'utf8'));
        req.write(formdata);
        req.end();

    });
}

https://www.cnblogs.com/king_domain/p/5630665.html
https://blog.csdn.net/haiyan2012/article/details/8540802

posted @ 2022-05-09 15:42  进阶的哈姆雷特  阅读(353)  评论(0编辑  收藏  举报