Przeczytałem kilka powiązanych pytań tutaj na SO, ale nie udało się znaleźć działającego rozwiązania.python-request post z nazwą pliku Unicode
Mam serwer kolby z tym kodem uproszczonej:
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)
Następnie w kliencie:
# 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')})
Po wysłaniu pierwszego żądania ze nie UTF-8 pliku serwer odbiera Żądanie z plikiem i wydruki ImmutableMultiDict([('file0', <FileStorage: u'a.txt' (None)>)])
, ale podczas wysyłania pliku z nazwą pliku utf-8 serwer wydaje się nie odbierać pliku po wydrukowaniu ImmutableMultiDict([])
.
używam żądania 2.3.0
ale problem nie zostanie rozwiązany przy użyciu najnowszej wersji, jak również (2.8.1
), wersja kolby 0.10.1
i wersja Kolba-relaksującego jest 0.3.4
.
Zrobiłem kilka kopania w kodzie , a żądanie wydaje się być wysłane ok (tj. Z plikiem), a ja wydrukowałem żądanie tuż przed wysłaniem i widzę, że nazwa pliku została rzeczywiście zakodowana dla RFC2231:
--6ea257530b254861b71626f10a801726
Content-Disposition: form-data; name="file0"; filename*=utf-8''%D7%90.txt
Podsumowując rzeczy, nie jestem do końca pewien, czy problem leży w requests
że nie prawidłowo dołączyć plik na żądanie lub jeśli Flask
mających problemy z podnoszenia pliki z nazwami plików, które są kodowane zgodnie z RFC2231.
UPDATE: Natknąłem tej kwestii w requests
GitHub: https://github.com/kennethreitz/requests/issues/2505
Ponieważ żądanie jest w porządku, musi to być serwer. Pytanie wygląda dla mnie jak zadanie związane z debugowaniem run-of-the-mill. Dodaj punkty przerwania/debugowanie drukowania tu i tam, aby ostatecznie wskazać konkretną linię kodu, która robi to źle. –
, więc żądania kodują nazwy plików w sposób, w jaki nie działa kolba? – mehdy