当前位置: 首页 > 面试题库 >

为什么我将MIME类型的.csv文件作为“ application / octet-stream”获得?

徐景明
2023-03-14
问题内容

我正在开发一个必须将Excel文件导入MySQL的PHP​​应用程序。所以我需要将Excel文件转换为.csv格式。但是当我想使用来获得它的类型时$_FILE['something']['type'],我就得到application/octet- stream了它的mime-type。
我认为这里有问题。因为我将以下列表收集为.csv文件mime-type:

text/comma-separated-values,  
text/csv,  
application/csv, 
application/excel, 
application/vnd.ms-excel, 
application/vnd.msexcel

怎么了 ?


问题答案:

在这种情况下,官方的HTTP规范总是很有帮助的。从RFC 2616
7.2.1
(我的重点已添加):

任何包含实体主体的HTTP / 1.1消息都应包括定义该主体媒体类型的Content-Type头字段。当且仅当Content-
Type字段未提供媒体类型时,接收方可以通过检查其内容和/或用于标识资源的URI的名称扩展来尝试猜测媒体类型。
如果媒体类型仍然未知,则接收者应将其视为类型“ application / octet-stream”

造成此问题的原因是,接受文件上传的服务器本身并不知道已上传的文件类型。为什么?因为它依赖于发送文件的HTTP消息来指定Content- Type标头来确定确切的mime类型。浏览器可能未发送Content-Type标题,并且服务器已application/octet- stream按照上面的官方HTTP规范摘录进行了假设。上载文件的客户端也可能选择不确定其上载文件的mime类型,并发送Content-Type: application/octet-stream标头本身。

现在,当我们将其与有关POST文件上传 文档 的PHP手册一起考虑时,我们将看到以下内容:

$_FILES['userfile']['type']

文件的MIME类型(如果浏览器提供了此信息)。 一个例子是“ image /
gif”。但是,不会在PHP端检查此mime类型,因此不要将其值视为理所当然。

如您所见,即使$_FILES['userfile']['type']已指定,它也仅对应于Content- Type客户端发送的标头。此信息很容易被伪造,因此不应依赖。如果需要 确保 上传的文件是特定类型,则必须验证自己。



 类似资料:
  • 问题内容: 我在Google中警告我的字体: 资源被解释为字体,但以MIME类型application / octet-stream传输:“ … / Content / Fonts / iconFont.ttf”。 即使我有此警告也可以,但是我更喜欢避免此警告。 这里是我的报关表: 我已经搜索过其他帖子,但到目前为止还没有运气。 请注意,我的服务器是Microsoft的IIS。 知道如何避免此警告

  • 但最后一句话是: org.glassfish.jersey.message.internal.messageBodyProviderNotFoundException:找不到媒体的MessageBodyReader type=application/octet-stream,type=class com.app.weather.providers.org.openweatherap.pojo.we

  • 我的控制器如下所示: 我已经尝试将“consumes”更改为将APPLICATION_OCTET_STREAM_VALUE删除为MULTIPART_FORM_DATA_VALUE,也尝试删除它,但这些都没有帮助。 如果你需要更多的信息,请告诉我。谢了。

  • 我正在下载带有GET请求的文件。其中有些相当大,所以我希望将它们作为一个流来获取,并在能够处理它们时以块的形式读取字节,而不是在内存中读取整个文件。 WebClient看起来很合适,但我遇到了“UnsupportedMediaTypeException:内容类型'application/octet-stream'不受支持”。 下面是一些简短的示例代码。 这里是堆栈跟踪的一大块。 ...... 我确

  • 我试图使用RESTAssuret将“application/octet-stream”内容类型发送到RestAPI。但是它失败了,并抛出错误,比如:不知道如何将×××××编码为字节流。我曾尝试使用encoderConfig().encodeContentTypeas()方法,但此meyhod不适用于RestAssured。请建议是否有任何其他方法来解决这个问题。

  • 我试图在Spring Boot中创建一个使用JSON的简单Post请求处理程序。 默认情况下,我的理解是这将使用application/json。然而,当我使用curl或Postman发出请求时,我从Spring得到了这个响应。。。 在邮递员中,我得到了“415不支持的媒体类型”。 如果我明确定义“consumes”属性。。。 Spring开机返回这个。。。 我尝试将consumes设置为“app