我正在尝试在网站上实施上传模块,以便我们的用户将视频上传到我们的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?[...]. …Run Code Online (Sandbox Code Playgroud) 在浏览器中,我使用JS FileReader()。readAsBinaryString()读取了一个文件。使用CryptoJS库,我可以MD5哈希数据。
这工作正常,但我不知道如何处理大文件。例如,仅读取2GiB文件会使浏览器窗口崩溃。我可以随时从文件数据中切出斑点并进行哈希处理,但这是否会阻止其他人在不遵循与我相同的步骤的情况下验证相同的哈希值?
在这种情况下,是否有办法获取大文件的md5哈希?例如,您将如何计算1TB文件的md5哈希?是否需要以流形式读取文件?
第一次咬牙,我不确定该怎么做。
这驻留在角度指令中,因此位于范围内。
var reader = new FileReader();
reader.onload = function (loadEvent) {
scope.$apply(function () {
scope.files = changeEvent.target.files;
scope.fileread = loadEvent.target.result;
scope.md5Data = CryptoJS.MD5(scope.fileread).toString();
});
}
// First ten megs of the file
reader.readAsBinaryString((changeEvent.target.files[0]).slice(0, 10 * 1024 * 1024));
Run Code Online (Sandbox Code Playgroud)