Próbuję zaimplementować moduł przesyłania na stronie internetowej, która umożliwiłaby naszym użytkownikom przesyłanie filmów wideo na nasze konto Vimeo. Używam uploadu jQuery Blueimp i nowego API Vimeo. https://github.com/blueimp/jQuery-File-Upload/wiki/Options https://developer.vimeo.com/api/upload#http-put-uploading Myślę, że jest blisko do pracy, ale brakuje mi niektórych szczegółów. Zgodnie z API Vimeo, muszę: 1. Wygenerować bilet wysyłania, który działa dobrze 2. Następnie przekazuję upload_link_secure do wysyłania pliku jquery, który rozpoczyna przesyłanie. To właśnie wniosków nagłówki żądania PUT wyglądać następująco:Vimeo API: przesyłanie strumieniowe za pomocą HTTP PUT i przesyłanie plików jQuery blueimp
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
ten sposób wzywam jQuery upload plików:
$('#file').fileupload({
url: upload_link_secure,
type: 'PUT'
});
Próbowałem też zmuszając nagłówek Content-Type do „video/mp4 "ale to nie robi żadnej różnicy w końcu.
Sprawdziłem również rozmiar pliku wiążąc zgłoszenie jquery fileupload i otrzymuję również mniejszą liczbę bajtów niż to, co zostało wysłane w nagłówkach, 43418764 w tym przykładzie, czy to jest w porządku?
- Sprawdź przesyłanie przez wysyłanie żądań umieścić na upload_link_secure niektóre nagłówki odpowiedzi otrzymuję:
kod stanu: 308 Resume niekompletne
zakres: bajtów = 0-3948544
Kodstatus: 308 Resume Niekompletne
Rząd: bajtów = 0-38682624
Stan Kod: 308 Resume Niekompletne
Zakres: bajtów = 0-43401216
- Sprawdź, czy wszystkie bajty dotarł do Vimeo, a następnie zakończyć przesyłanie wysyłając żądanie DELETE na complete_uri otrzymuję ten ostatni nagłówek podczas weryfikacji Dodano:
zakres: bajtów = 0-43418955
Wydaje dopasować Content-Length wysłać na pierwsze żądanie, więc wykonać DELETE wniosek, i to jest reponse uzyskać:
{ "ciało": { "error":” Twój plik wideo jest nieprawidłowy. Albo przesłałeś nieprawidłowy format pliku, albo przesyłanie jest niekompletne. Upewnij się, że weryfikujesz przesyłanie przed oznaczeniem go jako ukończonego. "}," Status ": 400," nagłówki ": {" Data ":" Pon., 06 października 2014 17 "," Serwer ":" Apache "," Vary " : "Zaakceptuj, Vimeo-Client-Id, Accept-Encoding", "Cache-Control": "no-cache, max-age = 315360000", "Expires": "Thu, 03 Oct 2024 17", "Content-Length ":" 184 "," X-Cnection ":" zamknij "," Content-Type ":" application/vnd.vimeo.error + json "," Via ":" 1.1 dca1-10" }}
musi Zrobiłem bardzo głupi błąd, ale nie jestem bardzo obeznany z tych wszystkich żądań HTTP i reponses, czy ktoś wie, co zrobiłem źle?
Dzięki!
[edytuj] dziękuję Dashron, ja rzeczywiście miał ustawić wieloczęściowy opcję jQuery FileUpload do fałsz:
$('#file').fileupload({
url: upload_link_secure,
type: 'PUT',
multipart: false
});
potem byłem coraz to HTTP err lub:
XMLHttpRequest cannot load https://1511632921.cloud.vimeo.com/upload?[...]. Request header field Content-Disposition is not allowed by Access-Control-Allow-Headers.
Nie może być czysty fix na to, ale nie mogę znaleźć go tak po prostu komentuje wiersze ustawić nagłówek Content-Disposition w jquery.fileupload.js
// if (!multipart || options.blob || !this._isInstanceOf('File', file)) {
// options.headers['Content-Disposition'] = 'attachment; filename="' +
// encodeURI(file.name) + '"';
// }
(patrz Edit3)
teraz działa dobrze! :)
[edit2] Zostałem poproszony o bardziej kompletny przykład kodu, który wymyśliłem, aby ten upload PUT działał, więc tutaj jest GIST zawierający odpowiedni szablon Twig z mojej aplikacji Symfony. Mam nadzieję, że jest wystarczająco jasne i że może pomóc. Kod może być prawdopodobnie dużo poprawiony, ale myślę, że to w porządku punkt wyjścia. https://gist.github.com/paulgv/13ff6d194bc0d662de7b
[Edit3] ja też sobie sprawę, że nigdy nie aktualizowane mój kod z czystszym fix dla kwestii miałem z nagłówkiem Content-Disposition
(patrz przekreślony tekst powyżej). Dzięki blueimp „s pomoc, okazało się, że można po prostu usunąć ten nagłówek w fileuploadsend
zwrotnego: przesłane
.bind('fileuploadsend', function (e, data) {
data.headers = {};
})
Hey @paulgv Miałem ten sam błąd i podążałem za wskazanymi krokami. Teraz wydaje się dobrze. Tyle tylko, że po przesłaniu pliku nie widzę go na moim koncie - i wywoływane jest także wywołanie błędu przesyłania pliku jquery. Jakąkolwiek wskazówkę dlaczego? – callmekatootie
Witaj w @mallmekatootie, najlepszym sposobem sprawdzenia, co się dzieje, może być oglądanie karty sieciowej w inspektorze przeglądarki Chrome podczas przesyłania, więc powinieneś zobaczyć, która prośba faktycznie przerywa przesyłanie. – paulgv