2014-10-06 12 views
6

मैं एक वेबसाइट पर एक अपलोड मॉड्यूल को लागू करने की कोशिश कर रहा हूं जो हमारे उपयोगकर्ताओं को हमारे Vimeo खाते में वीडियो अपलोड करने की अनुमति देगा। मैं ब्लूंप के jQuery फ़ाइल अपलोड और वीमियो की नई एपीआई का उपयोग कर रहा हूं। https://github.com/blueimp/jQuery-File-Upload/wiki/Options https://developer.vimeo.com/api/upload#http-put-uploading मुझे लगता है कि यह काम करने के करीब है लेकिन मुझे कुछ विवरण याद आना चाहिए। वीमियो के एपीआई के अनुसार, मुझे यह करना होगा: 1. एक अपलोड टिकट जेनरेट करें, जो ठीक काम करता है 2. फिर मैं upload_link_secure को jquery फ़ाइल अपलोड में भेजता हूं जो अपलोड करना शुरू करता है।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 यह वही है PUT अनुरोध के लिए अनुरोध हेडर देखने की तरह है "लेकिन यह अंत में कोई फर्क नहीं पड़ता है।

मैंने jquery fileupload के सबमिट ईवेंट को बाध्यकारी करके फ़ाइल के आकार की भी जांच की है और मुझे हेडर में भेजे गए की तुलना में कम बाइट्स गिनती भी मिलती है, इस उदाहरण में 43418764, क्या यह ठीक है?

  1. upload_link_secure पर डाल अनुरोध भेजकर फ़ाइल सत्यापित करें, कुछ प्रतिक्रिया हेडर मैं:

स्थिति कोड: 308 फिर से शुरू अधूरा

रेंज: बाइट्स = 0-3948544

स्थिति कोड: 308 फिर से शुरू अधूरा

रेंज: बाइट्स = 0-38,682,624

स्थिति कोड: 308 फिर से शुरू अधूरा

रेंज: बाइट्स = 0-43401216

  1. सुनिश्चित करें कि सभी बाइट्स, Vimeo करने के लिए इसे बनाया है तो अपलोड पूर्ण बनाओ

रेंज:: complete_uri पर एक हटाने का अनुरोध भेजकर मैं जब अपलोड की पुष्टि करने के इस अंतिम हैडर प्राप्त बाइट्स = 0-43,418,955

+०१२३५१६४१०६१

यह मैच के लिए सामग्री-लंबाई पहले अनुरोध तो मैं एक हटाने का अनुरोध प्रदर्शन में भेज रहा है, और यह प्रतिक्रिया है मैं:

{ "शरीर": { "त्रुटि": " आपकी वीडियो फ़ाइल मान्य नहीं है। या तो आपने एक अवैध फ़ाइल प्रारूप अपलोड किया है, या आपका अपलोड अपूर्ण है। सुनिश्चित करें कि आप इसे पूर्ण रूप से चिह्नित करने से पहले अपना अपलोड सत्यापित करें। "}," स्थिति ": 400," शीर्षलेख ": {" तिथि ":" सोम, 06 अक्टूबर 2014 17 "," सर्वर ":" अपाचे "," वेरी " : "स्वीकार करें, Vimeo-Client-Id, Accept-Encoding", "कैश-कंट्रोल": "नो-कैश, अधिकतम आयु = 315360000", "समाप्त हो जाती है": "गुरु, 03 अक्टूबर 2024 17", "सामग्री-लंबाई ":" 184 "," एक्स-Cnection ":" करीब "," सामग्री प्रकार ":" आवेदन/vnd.vimeo.error + json "," के माध्यम से ":" 1।1 dca1-10 "}}

मैं एक बहुत ही गूंगा गलती की है चाहिए, लेकिन मैं उन सभी HTTP अनुरोध और प्रतिक्रियाओं की साथ बहुत परिचित नहीं हूँ, किसी को भी क्या मैं गलत किया था पता है?

धन्यवाद!

[संपादित करें] धन्यवाद एक बहुत Dashron, मैं वास्तव में jQuery fileupload के गलत पर बहुखण्डीय विकल्प सेट करना पड़ा:

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

उसके बाद, मैं इस हो रही थी HTTP अं या:

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)

अब यह ठीक काम करता है! :)

[EDIT2] मैं कोड को अधिक अच्छी तरह उदाहरण के लिए कहा गया था मैं आया कि PUT अपलोड काम करने के लिए के साथ इसलिए यहाँ मेरी Symfony आवेदन से प्रासंगिक टहनी टेम्पलेट युक्त एक सार है। मुझे उम्मीद है कि यह काफी स्पष्ट है और यह मदद कर सकता है। कोड शायद बहुत सुधार किया जा सकता है लेकिन मुझे लगता है कि यह एक ठीक प्रारंभ बिंदु है। https://gist.github.com/paulgv/13ff6d194bc0d662de7b

[edit3] मैं भी महसूस करते हैं कि मैं इस मुद्दे मैं Content-Disposition हैडर के साथ किया था के लिए एक क्लीनर ठीक (ऊपर पाठ को काटकर देखें) के साथ मेरे कोड अद्यतन कभी नहीं। धन्यवाद blueimp की मदद करने के लिए, मुझे पता चला है कि आप केवल fileuploadsend कॉलबैक में इस शीर्ष लेख निकाल सकते हैं:

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

अरे @ पाउल्गव मुझे एक ही त्रुटि थी और आपने जो कदम उठाए थे उनका पालन किया। यह ठीक लगता है। सिवाय इसके कि फ़ाइल अपलोड होने के बाद, मैं इसे अपने खाते में नहीं देख सकता - और साथ ही, jquery फ़ाइल अपलोड की त्रुटि कॉलबैक को कॉल किया जाता है। कोई सुराग क्यों? – callmekatootie

+0

हाय @callmekatootie, क्या गलत हो रहा है यह जानने का सबसे अच्छा तरीका अपलोड के दौरान क्रोम के वेब इंस्पेक्टर में नेटवर्क टैब देखना होगा, आपको यह देखने में सक्षम होना चाहिए कि कौन सा अनुरोध वास्तव में अपलोड को तोड़ देता है। – paulgv

उत्तर

1

PUT अपलोड बहुखण्डीय रूप एन्कोडिंग का समर्थन नहीं करते। PUT अपलोड में फ़ाइल के केवल कच्चे बाइट्स का अनुरोध निकाय होना चाहिए।

मल्टीपार्ट POST अपलोड पर समर्थित है, लेकिन पोस्ट अपलोड पुन: अपलोड करने योग्य अपलोड या रेंज हेडर का समर्थन नहीं करते हैं।

संबंधित मुद्दे