मैंने SO पर कई संबंधित प्रश्नों के माध्यम से पढ़ा है लेकिन एक समाधान समाधान खोजने में कामयाब नहीं रहा। क्लाइंट में फिरपायथन-अनुरोध यूनिकोड फ़ाइल नामों के साथ पोस्ट
app = Flask(__name__)
api = Api(app)
class SendMailAPI(Resource):
def post(self):
print request.files
return Response(status=200)
api.add_resource(SendMailAPI, '/')
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
:
मैं इस सरलीकृत कोड के साथ एक बोतल सर्वर है
# coding:utf-8
import requests
eng_file_name = 'a.txt'
heb_file_name = u'א.txt'
requests.post('http://localhost:5000/', files={'file0': open(eng_file_name, 'rb')})
requests.post('http://localhost:5000/', files={'file0': open(heb_file_name, 'rb')})
जब गैर utf-8 फ़ाइल नाम के साथ पहले अनुरोध भेजने के सर्वर प्राप्त करता है फ़ाइल के साथ अनुरोध करें और ImmutableMultiDict([('file0', <FileStorage: u'a.txt' (None)>)])
प्रिंट करें, लेकिन utf-8 फ़ाइल नाम के साथ फ़ाइल भेजते समय सर्वर को फ़ाइल प्राप्त नहीं होती है क्योंकि यह ImmutableMultiDict([])
प्रिंट करता है।
मैं अनुरोध 2.3.0
उपयोग कर रहा हूँ, लेकिन समस्या के रूप में अच्छी तरह से (2.8.1
) नवीनतम संस्करण के साथ हल नहीं होती, बोतल संस्करण 0.10.1
है और कुप्पी के RESTful संस्करण 0.3.4
है।
मैंने requests
कोड में कुछ खुदाई की है और अनुरोध ठीक से भेजा गया है (यानी फ़ाइल के साथ), और मैंने अनुरोध भेजने से ठीक पहले अनुरोध मुद्रित किया और फ़ाइल नाम वास्तव में आरएफसी 2231 को एन्कोड किया गया था:
--6ea257530b254861b71626f10a801726
Content-Disposition: form-data; name="file0"; filename*=utf-8''%D7%90.txt
बातें सारांश में, मैं पूरी तरह यकीन नहीं करता है, तो समस्या requests
के भीतर निहित है कि ठीक से अनुरोध करने के लिए फ़ाइल संलग्न नहीं है या अगर Flask
फ़ाइल नाम हैं कि के साथ फ़ाइलों को उठा के साथ मुद्दों कर रहा है आरएफसी 2231 के अनुसार एन्कोडेड।
अद्यतन:requests
GitHub में इस मुद्दे भर में आया: https://github.com/kennethreitz/requests/issues/2505
चूंकि अनुरोध ठीक है, यह सर्वर होना चाहिए। सवाल मेरे लिए रन-ऑफ-द-मिल डीबगिंग कार्य जैसा दिखता है। कोड की विशिष्ट पंक्ति को गलत तरीके से इंगित करने के लिए यहां कुछ और ब्रेकपॉइंट्स/डीबग प्रिंटिंग जोड़ें जो गलत है। –
तो अनुरोध फ़ाइल नामों को इस तरह से एन्कोड करता है कि फ्लास्क समर्थन नहीं करता है? – mehdy