Ich habe einige verwandte Fragen hier auf SO gelesen, aber nicht geschafft, eine funktionierende Lösung zu finden.python-Anfragen Post mit Unicode-Dateinamen
Ich habe einen Kolben Server mit diesem vereinfachten Code:
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)
dann in dem Client:
# 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')})
Wenn die erste Anforderung mit dem nicht-UTF-8-Dateinamen sendet der Server die empfängt Anfrage mit der Datei und druckt ImmutableMultiDict([('file0', <FileStorage: u'a.txt' (None)>)])
, aber beim Senden der Datei mit dem UTF-8-Dateinamen scheint der Server die Datei nicht zu empfangen, wie es ImmutableMultiDict([])
druckt.
Ich verwende Anfragen 2.3.0
aber das Problem mit der neuesten Version nicht so gut lösen (2.8.1
), ist Flask Version 0.10.1
und Flask-RESTful-Version ist 0.3.4
.
Ich habe etwas graben in requests
Code und die Anfrage scheint in Ordnung gesendet werden (dh mit der Datei), und ich druckte die Anfrage direkt vor dem Senden und sehen Sie den Dateinamen wurde tatsächlich nach RFC2231 codiert:
--6ea257530b254861b71626f10a801726
Content-Disposition: form-data; name="file0"; filename*=utf-8''%D7%90.txt
um die Dinge zusammenzufassen, ich bin nicht ganz sicher, ob das Problem innerhalb requests
liegt, die nicht ordnungsgemäß die Datei auf die Anforderung oder wenn Flask
ist mit Probleme mit Aufnahme von Dateien mit Dateinamen nicht anhängen, die codiert nach RFC2231.
UPDATE: kamen in dieser Ausgabe in requests
GitHub: https://github.com/kennethreitz/requests/issues/2505
Da die Anfrage in Ordnung ist, muss dies der Server sein. Die Frage sieht für mich wie eine normale Debugging-Aufgabe aus. Fügen Sie hier und da einige Breakpoints/Debug-Druck hinzu, um die spezifische Codezeile, die es falsch macht, zu lokalisieren. –
so Anforderungen codiert die Dateinamen auf eine Weise, die Kolben nicht unterstützt? – mehdy