如何生成内容长度

时间:2019-06-12 17:17:27

标签: node.js http form-data

我正在使用节点模块form-data将multipart / forms发送到服务器,但是我不确定如何正确计算请求的内容长度。表单数据github文档似乎有点麻烦,我要发送到的服务器要求包含content-length标头。

const FormData = require('form-data');
const fs = require('fs');
const https = require('https');

class Platform {
  _postKey(key, serviceName) {
    const options = this._getOptions();
    const keyName = (key.search(/(PUBLIC)/) !== -1) ? 'publicKey' : 'privateKey';
    const extension = (keyName == 'publicKey') ? 'pub' : '';
    const filePath = (extension.length > 0) ? __dirname + '/data/'+serviceName+'.'+extension : __dirname + '/data/'+serviceName;
    const file = fs.createWriteStream(filePath, {flags: 'wx'});
    file.write(key);
    file.end();
    const form = new FormData();
    form.append('file', fs.createReadStream(filePath));
    form.append('Name', keyName);
    form.append('MimeMajor', 'application');
    form.append('MimeMinor', 'x-pem-file');
    form.append('Extension', extension);
    form.append('FileClass', 'MFS::File');
    options.headers = form.getHeaders();
    options.headers.Authorization = 'Basic ' + Buffer.from(this.FILESTORE_USERNAME + ':' + this.FILESTORE_PASSWORD).toString('base64');
    // options.headers['Content-Length'] = key.length;
    console.log(options);
    return new Promise((resolve, reject) => {
      let post = https.request(options, (res) => {
        let data = '';
        if (res.statusCode < 200 || res.statusCode > 299) {
          reject(new Error('File Storage API returned a status code outside of acceptable range: ' + res.statusCode));
        } else {
          res.setEncoding('utf8');
          res.on('data', (chunk) => {
            data += chunk;
          });

          res.on('error', (err) => {
            reject(err);
          });

          res.on('end', () => {
            console.log(data);
            if (data) {
              resolve(JSON.parse(data));
            } else {
              resolve();
            }
          });
        }
      });
      post.on('error', reject);
      form.pipe(post);
    });
  }
}

0 个答案:

没有答案