pau*_*lgv 6 php jquery file-upload put vimeo
我正在尝试在网站上实施上传模块,以便我们的用户将视频上传到我们的Vimeo帐户.我正在使用blueimp的jQuery File上传和Vimeo的新API. https://github.com/blueimp/jQuery-File-Upload/wiki/Options https://developer.vimeo.com/api/upload#http-put-uploading 我认为这是接近工作,但我必须失去了一些细节.根据Vimeo的API,我需要:1.生成上传票据,工作正常2.然后我将upload_link_secure传递给开始上传的jquery文件上传.这是PUT请求的请求标头如下所示:
Request Method:PUT
Status Code:200 OK
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Length:43418955
Content-Type:multipart/form-data; boundary=----WebKitFormBoundarye8sGy57JH6ACoOfJ
Run Code Online (Sandbox Code Playgroud)
这是我调用jQuery文件上传的方式:
$('#file').fileupload({
url: upload_link_secure,
type: 'PUT'
});
Run Code Online (Sandbox Code Playgroud)
我也尝试将Content-Type标题强制为"video/mp4",但它最终没有任何区别.
我还通过绑定jquery fileupload的submit事件检查了文件的大小,并且我得到的字节数也比标题中发送的字节数少,本例中为43418764,这样可以吗?
状态代码:308恢复不完整
范围:字节= 0-3948544
状态代码:308恢复不完整
范围:字节= 0-38682624
状态代码:308恢复不完整
范围:字节= 0-43401216
范围:字节= 0-43418955
它似乎匹配第一个请求中的Content-Length发送,所以我执行DELETE请求,这是我得到的响应:
{"正文":{"错误":"您的视频文件无效.您上传的文件格式无效,或上传内容不完整.请确保在上传完成之前验证您的上传."},"状态":400,"header":{"Date":"Mon,06 Oct 2014 17","Server":"Apache","Vary":"Accept,Vimeo-Client-Id,Accept-Encoding","Cache" - 控制 ":" 无缓存,最大年龄= 315360000" , "过期": "星期四,2024年10月3日17", "内容长度": "184", "X-Cnection": "关闭"," Content-Type":"application/vnd.vimeo.error + json","Via":"1.1 dca1-10"}}
我一定犯了一个非常愚蠢的错误,但是我对所有那些HTTP请求和响应并不是很熟悉,有人知道我做错了什么吗?
谢谢 !
[编辑]非常感谢Dashron,我实际上必须将jQuery fileupload的multipart选项设置为false:
$('#file').fileupload({
url: upload_link_secure,
type: 'PUT',
multipart: false
});
Run Code Online (Sandbox Code Playgroud)
之后,我收到此HTTP错误:
XMLHttpRequest cannot load https://1511632921.cloud.vimeo.com/upload?[...]. Request header field Content-Disposition is not allowed by Access-Control-Allow-Headers.
Run Code Online (Sandbox Code Playgroud)
可能有一个干净的修复,但我没有找到它所以我只是评论在jquery.fileupload.js中设置Content-Disposition标头的行
// if (!multipart || options.blob || !this._isInstanceOf('File', file)) {
// options.headers['Content-Disposition'] = 'attachment; filename="' +
// encodeURI(file.name) + '"';
// }
Run Code Online (Sandbox Code Playgroud)
(见edit3)
现在它工作正常!:)
[edit2]我被要求提供一个更完整的代码示例,我提出了使PUT上传工作,所以这里是一个Gist包含我的Symfony应用程序中的相关Twig模板.我希望它足够清楚,它可以提供帮助.代码可能会有很大的改进,但我想这是一个好的起点.https://gist.github.com/paulgv/13ff6d194bc0d662de7b
[edit3]我也意识到我从来没有更新我的代码,更清楚地解决了我对Content-Disposition标题的问题(参见上面划掉的文字).感谢blueimp的帮助,我发现你可以在fileuploadsend回调中删除这个标题:
.bind('fileuploadsend', function (e, data) {
data.headers = {};
})
Run Code Online (Sandbox Code Playgroud)