0

通常 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);

});
4

1 回答 1

-1

导出了两个辅助函数restler来帮助创建您的数据选项。您不使用任何一个并指定 JS Object 文字。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);
于 2015-02-15T09:56:05.583 回答