2014-10-06 24 views
6

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?

  1. 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

Kod

status: 308 Resume Niekompletne

Rząd: bajtów = 0-38682624

Stan Kod: 308 Resume Niekompletne

Zakres: bajtów = 0-43401216

  1. 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 = {}; 
}) 
+0

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

+0

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

Odpowiedz

1

PUT nie obsługują kodowanie wieloczęściowy formularz. Przesłane PUT powinny mieć treść żądania tylko surowych bajtów pliku.

Multipart jest obsługiwany w przesyłanych plikach POST, ale przesyłane POST nie obsługują plików do wznowienia lub nagłówków zasięgu.

Powiązane problemy