Отправка многочастного / форм-данных с NodeJS, встроенным в модуль HTTPS - PullRequest
1 голос
/ 11 марта 2019

Мне нужно загрузить файл в API со встроенным HTTPS-модулем Node. Моя текущая функция для запроса к API предназначена для запросов "application / json". Инструкции по загрузке файла, заданные docs :

Разместите файл, используя multipart / form-data обычным способом, который файлы загружаются через браузер. Максимальный размер 10 МБ для фотографий, 50 МБ для других файлов.

Моя проблема здесь в том, что я понятия не имею, как сделать такой запрос, и я мог найти что-нибудь о том, как сделать это с помощью встроенных в узел модулей 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();
  }
...