我正在发送一个图像资产,通过HTTP存储,我想仔细选择MIME类型。
直觉上,我认为您希望遵循国际标准,并选择指定要发送的特定文件格式的MIME类型。实际上,MIME嗅探是一种可用于确定资产的文件格式的技术,因为这种类型有助于内容使用者处理传入的数据。
但是,我观察到流行的web框架建议我将文件(包括图像)处理为multipart/form-data,例如expressjs建议这样做,Flask也是如此。
为什么我选择将MIME类型指定为当格式图像/子类型存在时,多部分/表单数据?
单个字段的mime类型与包含所有字段的消息体的mime类型是分开的。multipart/form-data
是对表单中的多个文本和文件部分进行编码的标准方法,将它们作为单个HTTP请求发送,并让服务器知道如何再次将其解析为字段和文件。每个多部分项目都有一个名称和mime类型(内容类型)。Flask为request.files
解析所有这些,每个文件都是一个FileStorage
实例。
image = request.files["image"] # image is the name of the field
print(image.filename)
print(image.content_type)
print(image.mimetype) # content type without encoding option
浏览器将从表单输入中选择的文件中检测文件名和mime类型。其他客户端(JavaScript, Python等)通常也有一些机制来为每个文件设置此元数据。
大多数客户端都可以发送任意字节作为请求体,并允许在这种情况下设置任何适当的mime类型。如果你想直接发送图片,你也可以这样做,但只在非常特殊的情况下才需要这样做。
我想你混淆了几个概念。
如果你有<form>
web页面,上传数据,因此<input type=file...>
字段,然后整个multipart/form-data
POST
数据的格式。该数据将由几个小节组成(正如multipart所做的那样);每个表单字段都有自己单独的MIME部分,这些部分应该写image/jpeg
,或者其他什么。
如果你要向浏览器发送数据,那么你应该使用合适的类型。