【发布时间】:2019-06-19 08:49:35
【问题描述】:
我有一个允许上传媒体文件的 Django (1.11) 站点。我对 mime 类型进行了一些基本检查(例如,只接受“video/m4v”文件)。
当我在浏览器(通过 Web UI)上使用该网站时,此检查工作正常 - 通过 python manage.py runserver 运行。
我现在正在编写一些单元测试,但我发现无论我发布什么文件类型,它总是被选为应用程序/八位字节流 mime 类型。
我的单元测试代码如下:
media_file = open('sample_video.m4v','rb')
self.client.login(username='admin', password='password')
response = self.client.post(reverse('oppia_av_upload'), {'media_file': media_file })
self.assertEqual(response.status_code, 200)
在 self.client.post 命令中,有没有办法可以指定 mime 类型以便正确提取它?
关于信息,我知道 mime 类型可能会被“摆弄”,因此不能保证文件是它声称的类型。
非常感谢任何帮助。
编辑: 只是为了在表单验证中包含文件上传检查代码,以防我在这里做错了什么:
def clean(self):
cleaned_data = super(UploadMediaForm, self).clean()
media_file = cleaned_data.get("media_file")
print(media_file.content_type)
if media_file is not None and media_file.content_type not in settings.OPPIA_MEDIA_FILE_TYPES:
raise forms.ValidationError(_(u"You may only upload a media file which is one of the following types: %s" % ', '.join(settings.OPPIA_MEDIA_FILE_TYPES)))
【问题讨论】:
-
您是否尝试过使用
SimpleUploadedFile,如本答案所述? stackoverflow.com/a/27345260/2091925 -
@WillKeeling,不,我没有看到,但现在您已经指出,SimpleUploadedFile 正是我所需要的。如果您可以发表您的评论作为答案,我可以将其标记为已接受。谢谢
-
已添加答案 - 谢谢!
标签: django unit-testing mime-types