2016-12-12 9 views
0

私はDjango Rest Framework 3.4.4とDjango 1.10を使用しています。django restフレームワークを使用して非asciiファイル名でファイルをアップロードする方法

$http.post(fileUrl, fd, { 
    withCredentials: true, 
    transformRequest: angular.identity, 
    headers: { 
     'Content-Type': undefined 
    } 
}).success(function(data) { 
.... 

サーバ側で私は、次のしている:そのようなファイルが正常にアップロードされfoo.pdfとしてfilnameで

def post(self, request, format=None): 
    file_ids = [] 
    file_list = request.FILES.getlist('file_path') 
    for file in file_list: 
     serializer = FileSerializer(data={'file_path': file}) 
     if serializer.is_valid(): 
      serializer.save() 
.... 

これは、クライアント側のポスト要求があります。しかし、ファイル名にアルメニア文字:ա。pdfが含まれていると、UnicodeEncodeErrorエラーが発生します。 UnicodeEncodeError,Traceback

+0

質問にトレースバックを投稿する必要があります(外部サイトへのリンクが古くなります)。 djangoエラーページにコピー&ペースト可能なトレースバックを取得するためのボタンがあります。あなたの問題に関しては、ファイル名をサーバのファイルシステムに保存しようとする前に、そのファイル名をサニタイズする必要があります。 – thebjorn

+0

私は自分の質問に直接画像を埋め込むほどの評判はないので、代わりにsteckoverflowシステムにリンクが含まれています。確かに、 "コピーアンドペースト可能なトレースバック"は正しい方法です。私はそれをできるだけ早く質問に入れます。入力いただきありがとうございます。 –

答えて

0

これは、システム言語の変数を設定しなかった可能性が高いことを意味します。

たとえば、Djangoプロジェクトの実行に役立つ一部のアプリケーション(スーパーバイザーなど)では、デフォルトシステムを考慮しません。あなたはいつかそれを自分で設定する必要があります。

ほとんどの場合、あなたが不足していることでしょう:

  • LANG = "C.UTF-8"
  • LC_ALL = "C.UTF-8"
  • LC_LANG = "C.UTF-8

などです。

+0

私はドッカーを実行していると私は、Pythonの対話シェルで自分の設定をチェックする場合は[こちら](https://docs.djangoproject.com/en/1.10/ref/unicode/#気づいたように私は、UTF-8を取得できませんでしたファイル)LANG環境変数を使用して、予想されるエンコーディングを設定することをお勧めします言及リンクで :私はそれは私が見つけたとき(私はここに書きます助けにはならなかったことに驚きました 輸出LANG =「EN_US.UTF-8」 なぜ起こったのか)。しかし、指定した変数を設定した後、sys.getfilesystemencoding()の出力はUTF-8になり、ASCII以外の名前のファイルは期待通りにアップロードされました。どうもありがとう。 –

+0

これはうれしいことがうれしいです。これが私に起こったときにそれらを理解するために私にいくつかの時間をかけた:) – Linovia

0

モデルの保存方法でslugifyファイル名を試すこともできます。 hereからモデルの保存メソッドをオーバーライドする方法を見つけることができます。オブジェクトを保存する前に、ファイル名を変更してください。 "ա。pdf"の場合、slugifyはおそらく "w.pdf"に変更します。 this exampleのように、表示の上部に
# -*- coding: utf-8 -*- を追加することもできます。

+0

素敵なトリックありがとう。 '# - * - coding:utf-8 - * - 'は役に立たなかった。 @ Linoviaの答えは正しいです。私はシステム言語の変数を設定しませんでした。 –

関連する問題