1

我有一个 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 吗?我有一种感觉,并且非常接近解决方案。

4

1 回答 1

3

对图形 api 执行 POST 请求 使用 file_url 字段为您的视频指定 url 并摆脱 source 字段,不需要 multipart/form-data 。

于 2015-08-19T11:11:37.123 回答