在纯nodejs中上传多部分表单

时间:2014-08-22 14:35:38

标签: javascript node.js file-upload

我尝试了一些代码来在基于节点的服务器上传文件,并且我收到了套接字挂断错误。

在谷歌搜索错误后,我遇到一个帖子,其中提示request.end()如果没有调用会导致此错误,但正如您将看到下面的代码我确实调用了request.end()。

任何帮助,建议表示赞赏

    var http = require('http');
var fs      = require('fs');

var options = {
  hostname: 'api.built.io',
  port    : 443,
  path    : '/vi/uploads',
  method  : 'POST'
};

var request = http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});

var size;
fs.stat('/home/abhijeet/Downloads/fgo-2.jpg',function(err,stats){
  size = stats.size;
  console.log(size);
});
var boundaryKey = Math.random().toString(16); // random string
request.setHeader('Content-Type', 'multipart/form-data; boundary="'+boundaryKey+'"');
request.setHeader('application_api_key','1234');
request.setHeader('authtoken','123');
request.setHeader('Content-Length','42215');


// the header for the one and only part (need to use CRLF here)
request.write( 
  '--' + boundaryKey + '\r\n'
  // use your file's mime type here, if known
  + 'Content-Type: image/jpeg\r\n' 
  // "name" is the name of the form field
  // "filename" is the name of the original file
  + 'Content-Disposition: form-data; name="upload[upload]"; filename="/home/abhijeet/Downloads/fgo-2.jpg"\r\n'
  + 'Content-Transfer-Encoding: binary\r\n\r\n' 
  );
var readFile = fs.createReadStream('/home/abhijeet/Downloads/fgo-2.jpg', { bufferSize: 4 * 1024 })
.on('end', function() {
    request.end('\r\n--' + boundaryKey + '--'); // mark the end of the one and only part
  })
  .pipe(request, { end: false }) // set "end" to false in the options so .end() isn't called on the request
  request.on('error',function(error){
    console.log(error);
  });
  // maybe write directly to the socket here?
  request.end();
  // console.log(readFile);

0 个答案:

没有答案