Nodejs通过http发送文件

时间:2017-04-20 00:31:57

标签: node.js file

我试图将文件发送到另一个node.js服务。因此,我使用http和表单数据模块。

这是我写的代码

function uintToString(uintArray) {
    return String.fromCharCode.apply(null, new Uint8Array(uintArray));
}


function (file) {     
    var data = uintToString(file.buffer);
//
var crlf = "\r\n",
    boundaryKey = Math.random().toString(16),
     boundary = `--${boundaryKey}`;
    delimeter = `${crlf}--${boundary}`,
    preamble = "", // ignored. a good place for non-standard mime info
    epilogue = "",
    headers = [
        'Content-Disposition: form-data; name="file"; filename="' + name + '"' + crlf
    ],
    closeDelimeter = `${delimeter}--`,
    multipartBody = Buffer.concat(
        new Buffer(preamble + delimeter + crlf + headers.join('') + crlf),
        data,
        new Buffer(closeDelimeter + epilogue)
    ); 


    var options = {
        host: 'localhost',
        port: 3000,
        method: 'POST',
        path: '/data/get',
        headers: {
            'Content-Type': 'multipart/form-data; boundary=' + boundary,
            'Content-Length': formData._valueLength
        }
    };

    //make request
    return httpsRequest(formData, options)
        .then((result) => {

           console.log(result);
        }, (err) => {

            console.log(err);

        });
};


function httpsRequest(data, options) {

    return new Promise(function (resolve, reject) {
        // request object
        var req = https.request(options, function (res) {
            var result = '';
            res.on('data', function (chunk) {
                result += chunk;
            });
            res.on('end', function () {
                console.log("https end result - " + result);
                resolve(result);
            });
            res.on('error', function (err) {
                reject(err);
            })
        });

        // req error
        req.on('error', function (err) {
            reject(err);
        });

        //send request witht the postData form
        req.write(data);
        req.end();

    });
}

正在给出""list" argument must be an Array of Buffers"此错误。看起来httpsRequest函数出了问题。

1 个答案:

答案 0 :(得分:0)

不要重新发明轮子,needle / request可以为你做这件事。如果您想宣传内容,请使用bluebird

const Promise = require('bluebird')
const needle = Promise.promisifyAll(require('needle'))

function send (file) {
  let url = 'https://localhost/data/get'
  let data = {
    zip_file: {
      buffer       : file.buffer,
      filename     : name,
      content_type : 'application/octet-stream'
    }
  }

  return needle.postAsync(url, data, { multipart: true })
}