Django休息框架工作 - 文件上传在测试中失败但在其他地方工作

时间:2014-12-07 10:14:50

标签: django unit-testing django-rest-framework

我尝试使用django 1.7,DRF 2.4.3和Pillow 2.6.1测试图像上传字段。

文件上传在管理员和我使用curl进行测试时正常工作

curl -X POST -S -H 'Accept: application/json' -F 'my_image=@hm.jpg;type=image/jpg' http://localhost:8000/api/randomresource/

当我在APITestCase

中运行类似的测试时
temp_file = open('hm.jpg',"r")
response = self.client.post('randomresource', {"my_image":temp_file}, format='multipart')
self.assertEqual(response.status_code,status.HTTP_201_CREATED)

我得到了

{'my_image': [u'Upload a valid image. The file you uploaded was either not an image or a corrupted image.']}

感谢对此的任何帮助。 感谢。

1 个答案:

答案 0 :(得分:2)

@mariodev在昨天的评论中回答了这个问题:

  

您是否尝试过rb标志而不是r?

这是因为您使用编码上传文件。对于文本文件和其他非二进制文件,这应该不是问题,但对于图像文件you need to open it as a binary file等情况。

temp_file = open('hm.jpg',"rb")

当Django REST Framework使用Pillow检查图像是否有效时,如果编码错误,它将引发异常。这就是您收到错误的原因,因为Django REST Framework获得了文件上载,但无法验证它是否为图像。使用curl时编码是正确的,因为curl将其作为二进制文件上传并且正在为您处理。