通常,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);
});
答案 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);