Sar*_*rit 4 python django macos excel
我正在使用 Django REST 进行文件上传测试。
Python3.6.2
Django1.11
djangorestframework==3.6.4
Excel-OSX 15.38(170902)
OSX 10.12.6
过去使用普通照片文件可以成功完成。
这次是来自网站的 Excel 文件。这是我从参考文献中得到的测试用例副本。
def test_upload_and_process_data_complete_case(self):
from django.core.files import File
from django.core.files.uploadedfile import SimpleUploadedFile
from soken_web.apps.imported_files.models import ImportFile
file = File(open(str(settings.BASE_DIR) + '/apps/zipcodes/complete.xlsx'))
uploaded_file = SimpleUploadedFile('new_image.xlsx', file.read(), content_type='multipart/form-data')
data = {
'attribute': {'author': 'Sigh'},
'type': ImportFile.FileType.zipcode,
'file': uploaded_file
}
response = self.client.post(reverse('api:import_file-list'), data, format='multipart')
response.render()
self.assertEqual(status.HTTP_201_CREATED, response.status_code)
Run Code Online (Sandbox Code Playgroud)
像个抄袭猫。除了这次我从https://www.mockaroo.com/下载了一个模拟文件。
这是我执行时引发的错误 file.read()
file
<File: /Users/el/Code/norak-cutter/soken/soken-web/soken_web/apps/zipcodes/complete.xlsx>
file.read()
Traceback (most recent call last):
File "/Users/el/Library/Application Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/172.3968.37/PyCharm.app/Contents/helpers/pydev/_pydevd_bundle/pydevd_exec2.py", line 3, in Exec
exec(exp, global_vars, local_vars)
File "<input>", line 1, in <module>
File "/Users/el/.pyenv/versions/3.6.2/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 0xb9 in position 14: invalid start byte
Run Code Online (Sandbox Code Playgroud)
确认:
1. 我可以从我的网络浏览器上传文件
2. 我可以在没有任何警告消息的情况下打开该文件。
问:
有什么我忘记关心的吗?
参考资料:
如何使用 django-rest-framework 的测试客户端测试二进制文件上传?
Django REST UnitTest 没有提交文件
打开文件的默认模式是“r”,表示非二进制读取。Python 假设您的文件是文本(编码)文件并尝试对内容进行解码。但它不是一个文本文件——它是一个二进制数据文件。
改变:
open(str(settings.BASE_DIR) + '/apps/zipcodes/complete.xlsx')
Run Code Online (Sandbox Code Playgroud)
到:
open(str(settings.BASE_DIR) + '/apps/zipcodes/complete.xlsx', 'rb')
Run Code Online (Sandbox Code Playgroud)
它可能会起作用。
| 归档时间: |
|
| 查看次数: |
3469 次 |
| 最近记录: |