Chr*_*cio 8 python base64 file-extension image mime-types
我有一个base64编码的图像,我解码并保存到Django中的ImageField.我想给文件一个随机名称,但我不知道文件扩展名.
我有"data:image/png; base64",前置于字符串,我知道我可以做一些正则表达式来提取mimetype,但我想知道是否有一种最佳实践方法可以从"数据:图像/ png; base64,"to".png"可靠.当有人突然想要上传我不支持的奇怪图像文件类型时,我不想让我的手枪功能中断.
最佳做法是检查文件的内容,而不是依赖文件外部的内容。例如,许多电子邮件攻击依赖于错误识别 mime 类型,以便毫无戒心的计算机执行它不应该执行的文件。幸运的是,大多数图像文件扩展名可以通过查看前几个字节(在解码 base64 之后)来确定。但是,最佳实践可能是使用文件魔法,它可以通过 python 包访问,例如this one或this one。
大多数图像文件扩展名在 mimetype 中是显而易见的。对于 gif、pxc、png、tiff 和 jpeg,文件扩展名就是 mime 类型的“image/”部分之后的任何内容。为了处理晦涩的类型,python 确实提供了一个标准包:
>>> from mimetypes import guess_extension
>>> guess_extension('image/x-corelphotopaint')
'.cpt'
>>> guess_extension('image/png')
'.png'
Run Code Online (Sandbox Code Playgroud)
看起来mimetypesstdlib 模块即使在 Python 2 中也支持数据 url:
>>> from mimetypes import guess_extension, guess_type
>>> guess_extension(guess_type("data:image/png;base64,")[0])
'.png'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6822 次 |
| 最近记录: |