हरोकू पर तैनात Django परियोजनाओं में, मैं boto के माध्यम से Google क्लाउड स्टोरेज में फ़ाइलों को अपलोड करता था। हालांकि, हाल ही में मुझे बड़ी फाइलें अपलोड करनी होंगी जो हरोकू टाइमआउट का कारण बनेंगी।डीजेगो, हेरोकू, बोटो: Google क्लाउड स्टोरेज पर सीधे फ़ाइल अपलोड
पायथन:
conn = boto.connect_gs(gs_access_key_id=GS_ACCESS_KEY,
gs_secret_access_key=GS_SECRET_KEY)
presignedUrl = conn.generate_url(expires_in=3600, method='PUT', bucket=<bucketName>, key=<fileName>, force_http=True)
जे एस:
मैं इस प्रकार Heroku के प्रलेखन के बारे में direct file upload to S3, और अनुरूपण अनुसरण कर रही हूं
url = 'https://<bucketName>.storage.googleapis.com/<fileName>?Signature=...&Expires=1471451569&GoogleAccessId=...'; // "presignUrl"
postData = new FormData();
postData.append(...);
...
$.ajax({
url: url,
type: 'PUT',
data: postData,
processData: false,
contentType: false,
});
मैं निम्नलिखित त्रुटि संदेश मिला:
XMLHttpRequest cannot load http:/... Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access.
संपादित करें:
gsutil cors get gs://<bucketName>
के उत्पादन:
[{"maxAgeSeconds": 3600, "method": ["GET", "POST", "HEAD", "DELETE", "PUT"], "origin": ["*"], "responseHeader": ["Content-Type"]}]
ऐसा लगता है CORS ठीक है। तो, मैं समस्या को कैसे हल करूं? धन्यवाद।
संपादित करें 2:
फ़ायरफ़ॉक्स से विकल्प अनुरोध के शीर्षक:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-TW,zh;q=0.8,en-US;q=0.5,en;q=0.3
Access-Control-Request-Method: PUT
Connection: keep-alive
Host: <bucketName>.storage.googleapis.com
Origin: http://localhost:8000
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
क्रोम से विकल्प अनुरोध के शीर्षक:
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-TW,zh;q=0.8,en;q=0.6,en-US;q=0.4,zh-CN;q=0.2
Access-Control-Request-Headers:
Access-Control-Request-Method:PUT
Connection:keep-alive
Host:directupload.storage.googleapis.com
Origin:http://localhost:8000
Referer:http://localhost:8000/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
X-Client-Data:CIe2yQEIprbJAQjznMoB
यह मदद मिलेगी अगर आप preflight के लिए शीर्षलेखों शामिल (विकल्प) अनुरोध और प्रतिक्रिया वह aders। अनुरोध पर विशेष रूप से एक्सेस-कंट्रोल-अनुरोध- * और मूल शीर्षलेख और ACCESS-CONTROL- * प्रतिक्रिया पर शीर्षलेख। –
क्या आप अधिक विस्तृत करेंगे क्योंकि मुझे नहीं पता कि उन डेटा को कैसे शामिल किया जाए। बहुत बहुत धन्यवाद। –
सबसे आसान तरीका आपके ब्राउज़र के डेवलपर टूल का उपयोग करना होगा (आमतौर पर एफ 12 लेकिन हमेशा नहीं। उदाहरण के लिए ओएस एक्स पर क्रोम OPTION-COMMAND-i का उपयोग करता है)। डेवलपर टूल में नेटवर्क टैब होना चाहिए। सुनिश्चित करें कि यह यातायात को कैप्चर कर रहा है, प्रत्येक ब्राउज़र थोड़ा अलग है। फिर आगे बढ़ें और अपना AJAX अनुरोध करें, ब्राउज़र को आउटगोइंग अनुरोध और प्रतिक्रिया को कैप्चर करना चाहिए।यदि आप उचित अनुरोध का चयन करते हैं तो आपको ब्राउज़र से अनुरोध और सर्वर से प्रतिक्रिया दोनों के बारे में जानकारी का एक समूह देखने में सक्षम होना चाहिए। –