首页 > 解决方案 > HTTPS 模块中内置 NodeJS 的 Multipart/form-data 发布请求

问题描述

我需要使用 Node 的内置 HTTPS 模块将文件上传到 API。我当前对 API 的请求功能是为“应用程序/json”请求设计的。文档给出的上传文件的说明是:

使用 multipart/form-data 以通常通过浏览器上传文件的方式发布文件。照片最大 10 MB,其他文件最大 50 MB。

我的问题是我不知道如何提出这样的请求,我可以找到任何关于如何使用节点内置的 HTTP/HTTPS 模块来做到这一点的任何信息。

execute(method, params = {}, callback = (res) => {}) {
    let ret = "";
    let options = {
      protocol: "https:",
      hostname: "api.telegram.org",
      port: 443,
      headers: {"Content-Type": "application/json", "Connection":"keep-alive"}, //"Content-Type":"multipart/form-data"
      path: "/bot"+this.token+"/"+method,
      method: "POST"
    };

    let req = this.https.request(options, (res) => {
      res.setEncoding("utf8");

      //Data Stream
      res.on("data", (chunk) => {
        ret += chunk;
        if (res.statusCode != 200) {
          console.error("Something went wrong while connecting to the Telegram API!\n>Status Code: " + res.statusCode + "\n>URL: " + options.hostname + options.path + "\n>Params: " + JSON.stringify(params) + "\n>Response: " + chunk + "\n");
        }
      });

      res.on("error", (err) => {
        console.error(e);
        return;
      });

      //Executes callback after closing the data stream
      res.on("end", () => {
        try {
          ret = JSON.parse(ret).result;
        } catch (e) {
          console.error("Couldn't parse request results!\n>" + e);
          return;
        } finally {
          try {
            callback(ret, params);
          } catch (callbackE) {
            console.error("Error in callback!\n>" + callbackE);
          }
        }
      });
    });

    //Adds parameters
    req.write(""+JSON.stringify(params));
    req.end();
  }

标签: node.jshttphttpstelegrammultipart

解决方案


推荐阅读