我有一个 facebook 页面,我正在尝试上传一个已经托管在我的服务器上的视频。我需要通过 javascript 执行此操作,而我所拥有的只是视频的 src 链接(类似于https://cdn.whodaman.net/Q45rt7y.mp4)。作为管理员,我拥有所有必需的权限 ( publish_stream, manage_pages)。
facebook api说我必须发送数据,这multipart/form-data意味着视频内容。所以要通过 ajax 做到这一点,我在 stackoverflow 上关注了这个问题,并关注了 How to send FormData objects with Ajax-requests in jQuery。
这是我的javascript 代码:
var fd = new FormData();
fd.append('来源', 'https://cdn.whodaman.net/Q45rt7y.mp4' );
fd.append('access_token', testaccessToken);
fd.append('title', "测试视频");
$.ajax({
url: "https://graph-video.facebook.com/"+testPageId+"/videos",
数据:fd,
处理数据:假,
内容类型:假,
类型:'POST',
发送前:函数(xhr){
xhr.setRequestHeader('Content-Type', 'multipart/form-data');
}
});
这是请求和相应的响应:
请求网址:https://graph-video.facebook.com/[my page id]/videos
请求方法:POST
状态码:400 错误请求
请求标头
接受:*/*
接受编码:gzip、deflate、sdch
接受语言:en-US,en;q=0.8
缓存控制:无缓存
连接:保持活动
内容长度:948
内容类型:multipart/form-data
Cookie:[一些 cookie 数据]
主持人:graph-video.facebook.com
来源:http://real.domain.com:8090
杂注:无缓存
参考:http://real.domain.com:8090/test/upload
用户代理:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
请求有效载荷
------WebKitFormBoundaryd8laVBo5HXRTFJnn
内容处置:表单数据;名称="来源"
https://cdn.whodaman.net/Q45rt7y.mp4
------WebKitFormBoundaryd8laVBo5HXRTFJnn
内容处置:表单数据;名称="access_token"
[我的访问令牌]
------WebKitFormBoundaryd8laVBo5HXRTFJnn
内容处置:表单数据;名称=“标题”
测试视频
------WebKitFormBoundaryd8laVBo5HXRTFJnn--
响应标头
访问控制允许来源:*
缓存控制:无存储
连接:保持活动
内容长度:146
内容类型:应用程序/json;字符集=UTF-8
日期:2013 年 11 月 11 日星期一 13:50:45 GMT
过期时间:2000 年 1 月 1 日星期六 00:00:00 GMT
杂注:无缓存
" WWW-Authenticate:OAuth "Facebook Platform" "invalid_token" "请求此资源需要访问令牌。
X-FB-调试:HlhHF7eIBkLbUBktqeWnVv8V3viIeS8jom0WPt1D7fc=
X-FB-Rev:1000997
Facebook 正在请求访问令牌!我很确定我有正确的,因为我能够添加文本状态帖子。我还尝试将file表单数据中的参数名称从source更改file为无效。
那么甚至可以直接从视频网址通过 js sdk 将视频上传到 Facebook 吗?我有一种感觉,并且非常接近解决方案。