काम नहीं कर रहा है। मैं एक ऐपेंगिन ऐप से डॉटक्लाउड पर होस्ट किए गए बाहरी (डीजेंगो) एपीआई में एक मल्टीपार्ट पोस्ट अनुरोध भेजने का प्रयास कर रहा हूं। अनुरोध कुछ टेक्स्ट और एक फ़ाइल (पीडीएफ) भी शामिल है और निम्नलिखित कोडएपेंगिन पायथन में मल्टीपार्ट/फॉर्म-डेटा के साथ पोस्ट अनुरोध
from google.appengine.api import urlfetch
from poster.encode import multipart_encode
from libs.poster.streaminghttp import register_openers
register_openers()
file_data = self.request.POST['file_to_upload']
the_file = file_data
send_url = "http://127.0.0.1:8000/"
values = {
'user_id' : '12341234',
'the_file' : the_file
}
data, headers = multipart_encode(values)
headers['User-Agent'] = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
data = str().join(data)
result = urlfetch.fetch(url=send_url, payload=data, method=urlfetch.POST, headers=headers)
logging.info(result.content)
इस विधि AppEngine चलाता देता है चेतावनी निम्नलिखित का उपयोग कर भेज दिया जाता है (मुझे यकीन है कि अगर यह मेरी समस्या से संबंधित है नहीं कर रहा हूँ)
Stripped prohibited headers from URLFetch request: ['Content-Length']
और Django निम्न त्रुटि
<class 'django.utils.datastructures.MultiValueDictKeyError'>"Key 'the_file' not found in <MultiValueDict: {}>"
Django कोड के माध्यम से भेजता है बहुत आसान है और काम करता है जब मैं डाकिया chrome एक्सटेंशन का उपयोग एक फाइल भेजने के लिए।
@csrf_exempt
def index(request):
try:
user_id = request.POST["user_id"]
the_file = request.FILES["the_file"]
return HttpResponse("OK")
except:
return HttpResponse(sys.exc_info())
अगर मैं
print request.POST.keys()
जोड़ने मैं एक शब्दकोश का संकेत है कि फ़ाइल एक फ़ाइल के रूप में भेजा जा रहा है user_id और the_file युक्त मिलता है। अगर मैं FILES के लिए ऐसा करता हूं iee
print request.FILES.keys()
मुझे खाली सूची मिलती है []।
संपादित करें 1:
मैं someone1 के सुझाव लेकिन यह अभी भी विफल लागू करने के लिए मेरे सवाल बदल दिया है। मैंने ग्लेन को भेजे गए लिंक द्वारा अनुशंसित हेडर जोड़े को भी शामिल किया, लेकिन कोई खुशी नहीं।
संपादित करें 2:
मैं भी
the_file = file_data.file
the_file = file_data.file.read()
के रूपांतरों के रूप में the_file भेजने की कोशिश की है लेकिन मैं एक ही त्रुटि मिलती है।
संपादित करें 3:
मैं भी
the_file = request.POST["the_file"]
करने के लिए मेरे Django एप्लिकेशन संपादन की कोशिश की है लेकिन जब मैं
path = default_storage.save(file_location, ContentFile(the_file.read()))
यह
के साथ विफल साथ स्थानीय रूप से फ़ाइल को बचाने की कोशिश<type 'exceptions.AttributeError'>'unicode' object has no attribute 'read'<traceback object at 0x101f10098>
इसी तरह अगर मैं पहुँच the_file.file कोशिश (के रूप में मैं अपने ऐप्लिकेशन इंजन अनुप्रयोग में उपयोग कर सकते हैं) यह मुझसे कहता है
<type 'exceptions.AttributeError'>'unicode' object has no attribute 'file'<traceback object at 0x101f06d40>
हाय, कोड के लिए धन्यवाद। यहां दायर एपेंगिन में एक बग है (http://code.google.com/p/googleappengine/issues/detail?id=627) जो multipart_encode विधि की उपयोगिता को सीमित करता है। मैं अभी एक कामकाज का परीक्षण कर रहा हूँ। – user714852
मुझे पूरी तरह से यकीन नहीं है कि आप जो भी पूरा करने की कोशिश कर रहे हैं उसके लिए बग आपको प्रभावित करेगा। असल में, मुझे नहीं पता कि वह बग अभी भी मान्य है क्योंकि आप अपने डेटा को एन्कोड कर सकते हैं और इसे POST urlfetch में पेलोड के रूप में पैकेज कर सकते हैं जैसे उदाहरण कोड में मैंने पोस्टर lib का उपयोग किया है। – someone1
बिल्कुल सही! संपादित संस्करण बिल्कुल आवश्यक रूप से काम करता है - इसके साथ आपकी मदद के लिए बहुत बहुत धन्यवाद, यह मुझे व्याकुलता के लिए चला रहा था! – user714852