我尝试使用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.']}
感谢对此的任何帮助。 感谢。
答案 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将其作为二进制文件上传并且正在为您处理。