【发布时间】:2018-04-18 22:46:48
【问题描述】:
我有一个 FileField 用于上传 base64 音频的序列化器,我注意到 Base64 字符串不以 data:**** 开头。如何确定上传文件的 Mime 类型? i_need_the_file_extension_mimetype()
class AudioField(serializers.FileField):
def to_internal_value(self, data):
if isinstance(data, basestring):
data = re.sub(r"^data\:.+base64\,(.+)$", r"\1", data)
# Try to base64 decode the data url.
try:
decoded = base64.b64decode(data)
except TypeError:
raise serializers.ValidationError(_('Not a valid file'))
file_name, file_ext, mime_type = self.i_need_the_file_extension_mimetype(decoded)
data = ContentFile(decoded, name=file_name)
return super(AudioField, self).to_internal_value(data)
【问题讨论】:
-
请参阅this post 获取一些建议。
-
感谢@Ralf,但这不适用于我的情况。我已经知道 Mime 类型,在我的情况下,我的 Mime 类型是未知的
-
我相信这些答案中提到的一些外部库,例如
python-magic,可用于确定您上传文件的文件类型和mime-type。 -
你需要 MIME 类型做什么?您是否尝试确定文件是否包含有效的音频数据?
标签: python django audio django-rest-framework mime-types