我試圖在網站上實現上傳模塊,以便我們的用戶將視頻上傳到我們的Vimeo帳戶。我正在使用blueimp的jQuery文件上傳和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請求,請求頭的樣子:Vimeo API:使用HTTP PUT和blueimp的jQuery文件上傳進行流式上載
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
這是我如何調用jQuery的文件上傳:
$('#file').fileupload({
url: upload_link_secure,
type: 'PUT'
});
我也試圖迫使Content-Type頭爲「視頻/ MP4 「但最終沒有任何區別。
我也通過綁定jquery fileupload的提交事件來檢查文件的大小,並且我還得到了比標題中發送的字節數少的字節數,在這個例子中是43418764,這樣好嗎?
- 由upload_link_secure發送PUT請求驗證上傳,一些響應頭我得到:
- 確保所有字節它使到Vimeo,然後完成上傳
狀態碼:308續傳未完成
範圍:字節= 0-3948544
狀態碼:308續傳未完成
範圍:字節= 0-38682624
狀態代碼:308續傳未完成
範圍:字節= 0-43401216
範圍:通過發送上complete_uri 一個DELETE請求驗證上傳當我拿到這最後頭字節= 0-43418955
這似乎匹配的Content-Length的第一個請求,所以我執行刪除發送請求,這也是效應初探我得到:
{「體」:{「錯誤」:」您的視頻文件無效。您要麼上傳了無效的文件格式,要麼上傳不完整。 「},」status「:400,」headers「:{」Date「:」Mon,2014年10月6日17「,」Server「:」Apache「,」Vary「 :「Accept,Vimeo-Client-Id,Accept-Encoding」,「Cache-Control」:「no-cache,max-age = 315360000」,「Expires」:「Thu,2010101017」,「Content- Length 「:」 184" , 「X-Cnection」: 「關閉」, 「內容類型」: 「應用/ vnd.vimeo.error + JSON」, 「通過」:「1。1個dca1-10" }}
我一定都取得了非常愚蠢的錯誤,但我不是很熟悉所有的HTTP請求和反應變量,沒有任何人知道我做錯了什麼?
謝謝!
[編輯]非常感謝Dashron,我其實是有設置的jQuery文件上傳的多選項設置爲false:
$('#file').fileupload({
url: upload_link_secure,
type: 'PUT',
multipart: false
});
在那之後,我得到這個HTTP ERR或:
XMLHttpRequest cannot load https://1511632921.cloud.vimeo.com/upload?[...]. Request header field Content-Disposition is not allowed by Access-Control-Allow-Headers.
有可能是一個乾淨的修復,但我沒有找到它,所以我簡單地評論說,設置jquery.fileupload.js內容處置頭線
// if (!multipart || options.blob || !this._isInstanceOf('File', file)) {
// options.headers['Content-Disposition'] = 'attachment; filename="' +
// encodeURI(file.name) + '"';
// }
(見EDIT3)
現在它工作正常! :)
我被要求提供一個更完整的代碼示例,我想讓PUT上傳工作,所以這裏是一個包含我的Symfony應用程序相關的Twig模板的Gist。我希望它很清楚,它可以提供幫助。代碼可能可以改進很多,但我想這是一個好的起點。 https://gist.github.com/paulgv/13ff6d194bc0d662de7b
[EDIT3]我也意識到,我從來沒有更新我的代碼與我曾與Content-Disposition
頭的問題更清潔的修復(見劃掉文本上方)。由於blueimp的幫助下,我發現,你可以簡單地在fileuploadsend
回調刪除此標題:
.bind('fileuploadsend', function (e, data) {
data.headers = {};
})
嘿@paulgv我有同樣的錯誤,並遵循你提到的步驟。現在看起來很好。除了上傳文件之後,我無法在我的帳戶中看到它 - 並且還調用了jquery文件上傳的錯誤回調。任何線索爲什麼? – callmekatootie 2014-11-07 11:28:49
嗨@callmekatootie,知道發生了什麼問題的最好方法可能是在上傳過程中觀看Chrome瀏覽器的網絡檢查器中的網絡標籤,您應該能夠看到哪個請求確實會中斷上傳。 – paulgv 2014-11-08 16:54:57