我在s3上有一个我要发布到用户Facebook帐户的视频文件:
https.get(signedUrlOfObjectInS3, function(httpRes){
var form = new formData(); // that's form-data module https://github.com/felixge/node-form-data
form.append('source', httpRes);
var options = {
method: 'post',
host: 'graph-video.facebook.com',
path: '/me/videos?access_token=' + user_access_token,
headers: form.getHeaders(),
}
var buffer = '';
var apiCall = https.request(options, function (res){
res.on('data',function(chunk){
buffer += chunk;
});
res.on('end',function(){
var data = JSON.parse(buffer);
console.log('data from fb is: ' + util.inspect(data));
});
});
form.pipe(apiCall);
});
我从Facebook获得的回复是:
(#352)抱歉,您选择的视频文件采用我们不支持的格式。
s3上的视频文件是一个内容类型为video / quicktime的mov文件。
答案 0 :(得分:2)
好的,显然Facebook忽略了标题中的内容类型,并从文件名中猜出它。由于s3签名的网址没有以filename.mov结尾,例如它没有得到它......
我所要做的就是结束'& f = filename.mov'在signedUrl结束时,现在Facebook得到了......
答案 1 :(得分:0)
以下代码对我来说实际上对我来说很好:
https.get(signedUrlOfObjectInS3, function(httpRes) {
var form = new FormData(); // that's form-data module https://github.com/felixge/node-form-data
form.append('source', httpRes);
var options = {
method: 'post',
host: 'graph-video.facebook.com',
path: '/me/videos?access_token=' + user_access_token,
headers: form.getHeaders(),
}
var apiCall = https.request(options);
form.pipe(apiCall);
apiCall.on('response', function(res) {
console.log(res.statusCode);
});
});
尝试在apiCall回发中做出细微差别,
其他解释可能是我使用了公共亚马逊网址......