2

我有一个允许用户上传支持文件的应用程序。我正在使用 cffile 标签来保存文件。

标签如下所示:

<cffile action="upload" 
        destination="path..."
        nameconflict="makeunique"
        ACCEPT="application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/pdf, application/vnd.openxmlformats-officedocument.presentationml.presentation, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
        filefield="outline">

上传了一个 .xls 文件并生成了一个错误,指出上传的文件“application/octet-stream”未被接受。

问题是为什么 .xls 电子表格文件被服务器解释为具有“应用程序/八位字节流”mime 类型?

4

3 回答 3

2

我怀疑客户端的浏览器没有配置为为 .xls 文件选择正确的 mime 类型。最有可能的是,mime 类型的 application/octet-stream 是在请求​​中的 HTTP 标头中发送的。

于 2012-07-05T23:55:58.300 回答
0

忘记该accept属性,因为即使客户端浏览器发送正确的 MIME 类型,CF(9 及以下)也只会检查文件扩展名。

只需上传文件,然后根据您的白名单检查文件扩展名。

没有accept,你甚至不会得到那个例外。

于 2012-07-06T01:12:55.077 回答
-1

我认为下面的答案不正确,但我将其留在这里以帮助完成讨论。请参阅下面的评论。-mk

呃哦...我讨厌不同意 Sun Flower 但这里的问题是服务器上的扩展映射而不是客户端上的映射。文件到达服务器,ColdFusion 根据扩展名“查找”mime 类型。从未在您的服务器上安装过 Excel,很可能没有关联的 mime 类型。请记住,任何依赖于客户的东西都不会在这里为您提供帮助。文件到达,它有一个扩展名,并且扩展名必须与服务器知道的内容相匹配。

如果这是 Windows,您可以将 mime 类型添加到 IIS(只需搜索“mime 类型 - IIS6 或 IIS7 以获取说明),我相信它会自动将关联的 mime 类型添加到底层注册表配置单元。否则它是注册表黑客。我要从这里记忆中去,我太累了,无法查找 :)


抱歉 - 错过了关于应用程序/八位字节流的问题。这是任意文件的默认 mime 类型。有点包罗万象。

于 2012-07-06T02:57:39.050 回答