2017-04-21 10 views
0

私のプロジェクトはDjangoで作成したものの、ユーザーがzipファイルをアップロードできるようなフォームのページがあります。 このzipファイルから、私はそれを開いてそこからファイルを読みます。すべてのケースを検証するユニットテストで私が始めた : - 未.zip拡張子
- zipfile.is_zipfile()リターン偽
- 私は内部
を読みたいファイルが見つかりません -
は内部ファイルがDjangoユニットアップロードzipファイル

無効です。私のユニットテストのために

、私は、各エラーごとに異なるファイルを作成し、ようにdjango.test.Clientを使用して、それをアップロードします。

with open_file('wrong_format.zip') as file: 
      response = self.client.post(url, {'archive': file}) 
      self.assertEqual(response.status_code, 200) 
      self.assertContains(response, '<li>Only zip archived are allowed</li>') 

しかし、私は次のエラーを取得する:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x99 in position 10: invalid start byte

ブラウザからするとうまく動作します。ここで

はスタックです:

Traceback (most recent call last): 
    File "/app/plugins/tests/uploads.py", line 33, in test_bad_archive 
    response = self.client.post(url, {'archive': file}) 
    File "/usr/local/lib/python3.6/site-packages/django/test/client.py", line 548, in post 
    secure=secure, **extra) 
    File "/usr/local/lib/python3.6/site-packages/django/test/client.py", line 347, in post 
    post_data = self._encode_data(data, content_type) 
    File "/usr/local/lib/python3.6/site-packages/django/test/client.py", line 311, in _encode_data 
    return encode_multipart(BOUNDARY, data) 
    File "/usr/local/lib/python3.6/site-packages/django/test/client.py", line 201, in encode_multipart 
    lines.extend(encode_file(boundary, key, value)) 
    File "/usr/local/lib/python3.6/site-packages/django/test/client.py", line 254, in encode_file 
    to_bytes(file.read()) 
    File "/usr/local/lib/python3.6/codecs.py", line 321, in decode 
    (result, consumed) = self._buffer_decode(data, self.errors, final) 
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x99 in position 10: invalid start byte 
+0

スタックトレースを投稿できますか?内部のどの機能がこの問題を抱えているかを知るのに役立ちます。 – Anonymous

+0

はい、そのまま編集します –

+0

'open_file()'とは何ですか?なぜ普通の 'open()'ではないのですか?また、私は問題はあなたがバイナリモードでファイルをオープンしていないと思う( 'open( 'file.zip'、 'rb')')。 – Anonymous

答えて

0

はバイナリフラグbせずにファイルを開くと、バイナリと文字列が同じデータ型だったのPython 2にはOKだったが、Pythonの3はそれについてより厳密です。したがって、open(file, 'rb')を実行すると、システムはzipファイルをテキストとして解釈しようとしません。

関連する問題