是否可以将文件从客户端发送到restler.file?

时间:2015-02-04 08:02:57

标签: node.js express restler busboy

通常,restler.post()接受一个restler.file(...)对象来发送POST。如果您在服务器上有文件路径,则此方法有效。

例如:

//#############################################################################
// Video upload from file system on node console server
//#############################################################################

function(done){

  var fileStats = fs.statSync(videoFileName);
  var fileSizeInBytes = fileStats["size"];

  var data = {
    'name': objectVideoName,
    'type':'video',
    'content': 'application/mp4',
    'file': restler.file(videoFileName, null, fileSizeInBytes, null, "video" )
  };


  restler.post('https://api.astra.io/v0/bucket/'+bucketName+'/object', {
    multipart: true,
    data   : data,
    headers : { "Astra-Secret": astraSecret }
  }).on('complete', function(response) {
    console.log('Upload video to bucket: \n', response);
    done(null);
  });

},

如何直接从客户端发布文件而不将其保存在服务器上?

我正在尝试使用busboy。

//#############################################################################
// Video upload from client then POST to cdn
//#############################################################################
app.post('/addVideo', function (req, res) {

var video = {};
var busboy = new Busboy({headers: req.headers});

busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {

    var ext = mimetype.split('/').pop();
    var token = generateToken(crypto);

    var fileSizeInBytes = 900000;

    filename = token + ext;

    var videoName = filename;

    var bucketName = 'sampleVideos';

    var data = {
      'name': videoName,
      'type':'video',
      'content': 'application/mp4',
      'file': ***** WHAT GOES HERE ******
    };

    restler.post('https://api.astra.io/v0/bucket/'+bucketName+'/object', {
      multipart: true,
      data   : data,
      headers : { "Astra-Secret": astraSecret }
    }).on('complete', function(response) {
      console.log('Upload video to bucket: \n', response);
      res.send("200");
    });

});

busboy.on('field', function (fieldname, val, fieldnameTruncated, valTruncated) {
    video[fieldname] = val;
});

busboy.on('finish', function () {
    console.log('busboy finished');
});

req.pipe(busboy);

});

1 个答案:

答案 0 :(得分:-1)

restler导出了两个辅助函数来帮助创建数据选项。您不使用它们并指定JS对象文字。 restler.data()是你想要使用的

data: function(filename, contentType, data) {
    return new Data(filename, contentType, data);
}

所以而不是

var data = {
  'name': videoName,
  'type':'video',
  'content': 'application/mp4',
  'file': ***** WHAT GOES HERE ******
};

在您的示例中,您将执行此操作,因为它允许您使用任意内容而不是文件名

var data = restler.data(videoName, 'application/mp4', file);