2014-10-06 3 views
6

Ich versuche, ein Upload-Modul auf einer Website zu implementieren, die es unseren Nutzern ermöglichen würde, Videos auf unser Vimeo-Konto hochzuladen. Ich benutze die jQuery-Datei von blueim und die neue API von Vimeo. https://github.com/blueimp/jQuery-File-Upload/wiki/Options https://developer.vimeo.com/api/upload#http-put-uploading Ich denke, es ist in der Nähe zu arbeiten, aber ich muss einige Details fehlen. Nach Vimeo API muss ich: 1. Erstellen Sie ein Upload-Ticket, das funktioniert 2. Ich gebe dann die upload_link_secure zu jquery Datei hochladen, die Hochladen beginnt. Dies ist, was die Anforderungen Header für die PUT-Anfrage wie folgt aussehen:Vimeo API: Streaming-Upload mit HTTP PUT und blueimps jQuery-Dateiupload

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 

Dies ist, wie ich jQuery-Datei-Upload nennen:

$('#file').fileupload({ 
url: upload_link_secure, 
type: 'PUT' 
}); 

ich auch versucht, den Content-Type-Header zwingt zu „video/mp4 "Aber am Ende macht es keinen Unterschied.

Ich habe auch die Größe der Datei überprüft, indem ich das Submit-Ereignis von jquery fileupload gebunden habe, und ich bekomme auch eine niedrigere Anzahl an Bytes als in den Headern, 43418764 in diesem Beispiel, ist das okay?

  1. den Upload Überprüfen von PUT-Anfragen auf upload_link_secure senden, einige Antwort-Header erhalte ich:

Statuscode: 308 Lebenslauf Unvollständige

Bereich: Bytes = 0-3948544

Statuscode: 308 Lebenslauf Unvollständige

Bereich: Bytes = 0-38682624

Statuscode: 308 Lebenslauf Unvollständige

Bereich: Bytes = 0-43401216

  1. Sicherstellen, dass alle Bytes es Vimeo gemacht, dann füllen Sie den Upload durch eine DELETE-Anfrage auf complete_uri sendet ich diesen letzten Header erhalten, wenn der Upload-Überprüfung:

Bereich: Bytes = 0-43418955

Es scheint, die Content-Length in der ersten Anforderung senden übereinstimmen, damit ich eine DELETE-Anfrage durchzuführen, und dies ist die reponse ich:

{ "Körper": { "Fehler":“ Ihre Videodatei ist nicht gültig. Entweder haben Sie ein ungültiges Dateiformat hochgeladen oder Ihr Upload ist unvollständig. Stelle sicher, dass du deinen Upload verifizierst, bevor du ihn als vollständig markiert hast. "}," Status ": 400," headers ": {" Date ":" Mo, 06 Oct 2014 17 "," Server ":" Apache "," Vary " : "Accept, Vimeo-Client-ID, Accept-Encoding", "Cache-Steuerung": "no-cache, max-age = 315360000", "Läuft ab": "Do, 03 Oct 2024 17", "Content-Length ":" 184 "," X-Cnection ":" Schließen "," Inhaltstyp ":" application/vnd.vimeo.error + json "," Via ":" 1.1 dca1-10" }}

ich einen sehr dummen Fehler gemacht haben muss, aber ich bin nicht sehr vertraut mit all den HTTP-Anfragen und reponses, weiß jemand, was ich falsch gemacht habe?

Dank!

[bearbeiten] vielen Dank Dashron, hatte ich eigentlich jQuery Fileupload ist mehrt Option auf false gesetzt:

$('#file').fileupload({ 
     url: upload_link_secure, 
     type: 'PUT', 
     multipart: false 
    }); 

Danach wurde ich dies immer HTTP err oder:

XMLHttpRequest cannot load https://1511632921.cloud.vimeo.com/upload?[...]. Request header field Content-Disposition is not allowed by Access-Control-Allow-Headers. 

Es könnte eine saubere Lösung für das sein, aber ich fand es nicht so kommentierte ich einfach die Linien, die die Content-Disposition-Header in jquery.fileupload.js gesetzt

// if (!multipart || options.blob || !this._isInstanceOf('File', file)) { 
//  options.headers['Content-Disposition'] = 'attachment; filename="' + 
//   encodeURI(file.name) + '"'; 
// } 

Now (EDIT3 sehen), es funktioniert! :)

[edit2] Ich wurde um ein vollständigeres Beispiel des Codes gebeten, den ich gemacht habe, damit der PUT-Upload funktioniert, also hier ist ein Gist, der die relevante Twig-Vorlage aus meiner Symfony-Anwendung enthält. Ich hoffe, es ist klar genug und das kann helfen. Der Code kann wahrscheinlich sehr verbessert werden, aber ich denke, es ist ein guter Ausgangspunkt. https://gist.github.com/paulgv/13ff6d194bc0d662de7b

[EDIT3] Mir ist auch klar, dass ich meinen Code nie für die Ausgabe mit einem Reiniger fix aktualisiert ich mit dem Content-Disposition Kopf hatte (siehe gestrichenen Text oben). Dank blueimp ‚s Hilfe, fand ich heraus, dass Sie einfach diesen Header in fileuploadsend Rückruf entfernen:

.bind('fileuploadsend', function (e, data) { 
    data.headers = {}; 
}) 
+0

Hey @paulgv Ich hatte den gleichen Fehler und befolgte die Schritte, die Sie erwähnten. Es scheint jetzt in Ordnung. Abgesehen davon, dass die Datei nach dem Hochladen nicht in meinem Konto angezeigt wird, wird auch der Fehler-Callback der jQuery-Datei aufgerufen. Irgendein Hinweis warum? – callmekatootie

+0

Hi @callmekatoootie, die beste Möglichkeit zu wissen, was schief läuft, ist, während des Uploads die Registerkarte "Netzwerk" im Webinspektor von Chrome anzusehen. Sie sollten sehen können, welche Anfrage den Upload tatsächlich unterbricht. – paulgv

Antwort

1

PUT-Uploads unterstützen keine mehrteiliger Form-Codierung. PUT-Uploads sollten einen Anfragetext nur aus den Rohbytes der Datei haben.

Multipart wird bei POST-Uploads unterstützt, POST-Uploads unterstützen jedoch keine fortsetzbaren Uploads oder Bereichsheader.