【问题标题】:ColdFusion 10 CFFILE Accept mimetype not recognisedColdFusion 10 CFFILE 接受 mimetype 无法识别
【发布时间】:2014-04-18 12:33:19
【问题描述】:

我在上传 WMV 和 MPEG 文件时遇到问题,“video/x-ms-wmv”(等)在接受列表中 - 我收到一个错误

上传文件的 MIME 类型或扩展名 服务器不接受 application/octet-stream

使用 Chrome,我检查了标题并显示

内容配置:表单数据;名称="fv_file";文件名="blahblah.wmv" 内容类型:video/x-ms-wmv

客户端计算机也有看起来正确的 WMV 注册表项。

服务器端 Apache 配置为使用操作系统 mime 类型文件:/etc/mime.types。 此文件包含 wmv 和 mpeg 的条目: 视频/x-ms-wmv wmv 视频/mpeg mpeg

CF10 如何确定 mimetype?我正在努力寻找这些信息。 有人有解决办法吗?

谢谢

编辑-添加代码

<cffile action="UPLOAD" filefield="fv_file" destination="#pathtotheserverroot##mediadir#/video/" nameconflict="MAKEUNIQUE"   accept="#qry_xxxx.OT_MIMETYPES#" mode="644">

OT_MIMETYPES 的值为

video/mp4,video/mpeg,video/quicktime,video/x-msvideo,video/x-sgi-movie,video/avi,video/vnd.vivo,application/vnd.rn-realmedia,video/vnd .rn-realvideo,audio/vnd.rn-realaudio,audio/x-pn-realaudio,video/x-ms-wmv,audio/mpeg,video/mpg,video/mpe,video/x-ms-asf,video /x-m4v

为了完整性,我做了一个 CFDUMP

Accept   video/mp4,video/mpeg,video/quicktime,video/x-msvideo,video/x-sgi-movie,video/avi,video/vnd.vivo,application/vnd.rn-realmedia,video/vnd.rn-realvideo,audio/vnd.rn-realaudio,audio/x-pn-realaudio,video/x-ms-wmv,audio/mpeg,video/mpg,video/mpe,video/x-ms-asf,video/x-m4v
Detail   Only files of type video/mp4,video/mpeg,video/quicktime,video/x-msvideo,video/x-sgi-movie,video/avi,video/vnd.vivo,application/vnd.rn-realmedia,video/vnd.rn-realvideo,audio/vnd.rn-realaudio,audio/x-pn-realaudio,video/x-ms-wmv,audio/mpeg,video/mpg,video/mpe,video/x-ms-asf,video/x-m4v can be uploaded. Verify that you are uploading a file of the appropriate type.
Message  The MIME type or the Extension of the uploaded file application/octet-stream was not accepted by the server.
MimeType     application/octet-stream

【问题讨论】:

  • Adobe 对 &lt;cffile&gt; 在 ColdFusion 10 中的工作方式进行了几处更改。您能否附上您的 &lt;cffile&gt; 代码?
  • 您可能还想确保您的 mime 类型在您正在使用的服务器中。
  • 我已经编辑了原始问题以包含代码 - @Cory Fail,我该去哪里看?这是我最初的问题,CF 从哪里获取信息?如上在Apache中指定的

标签: coldfusion mime-types coldfusion-10


【解决方案1】:

在看到您的&lt;cffile&gt; 代码之前,我必须进行推测,但我的猜测是您在&lt;cffile&gt; 标签的accept 属性下不允许使用适当的mime 类型。


既然您已经包含了您的代码,我的假设已经得到证实:您没有在&lt;cffile&gt; 标记的accept 属性下允许适当的mime 类型。

详情请见下文。

&lt;cffile&gt; 标签在 ColdFusion 10 中的工作方式进行了几处更改。您可能知道也可能不知道,在 ColdFusion 10 中,他们将 strict 属性添加到标签 (documentation reference)。

  • 当 strict 为真时,在接受属性中只允许 MIME 类型或 MIME 类型和扩展的组合。由于默认情况下 strict 为 true,因此您应该为 accept 属性指定 MIME 类型。
  • 当 strict 为 false 时,可以将 MIME 类型或扩展名或两者的组合指定为接受属性的值。如需更多信息,请参阅this blog entry

不仅添加了该属性,而且strict 属性的默认值是true。因此,因为您没有在代码中指定它,所以它是 on

注意:如果您收到“上传文件的 MIME 类型 (image/jpeg) 未被服务器接受”之类的错误,请输入 accept="image/jpeg" 以接受 JPEG文件。

Taken from the Adobe documentation here。根据您发布的错误消息,尝试上传 mime 类型为“application/octet-stream”的文件。您似乎期待“video/x-ms-wmv”。因此,您可以尝试找出您的浏览器尝试将文件上传为“application/octet-stream”的原因,或者将该 mime 类型添加到您的 accept 属性中。 警告:这也将允许上传您可能不想要的其他类型的文件。

cffile accept 属性使用浏览器发送到服务器的 mime 类型。再读一遍……你的浏览器告诉cffile mime 类型是什么。 mime 类型很容易被欺骗

取自 Pete Freitag 在Tips for Secure File Uploads with ColdFusion 上的页面。 (一篇较早的文章,但仍有相关提示。)

我发现的一些其他参考资料可能会有所帮助:

【讨论】:

  • 如果它不在接受列表中,它不会说“video/x-ms-wmv”不被接受,而不是“application/octet-stream”。我已经尝试确定浏览器是否导致问题 - 我检查了标题和我的注册表设置。您确定错误是由于浏览器造成的吗?
  • 问题是,如错误所示,上传文件的 mime 类型是“application/octet-stream”而不是“video/x-ms-wmv”。我试图在我的回答中指出,将 mime 类型发送到 ColdFusion 服务器的是用户的浏览器。 CF 服务器实际上并不确定 mime 类型,它使用浏览器发送的内容和文件的文件扩展名。你读过我包含的参考资料吗?他们提供了有关该过程的更多信息。您的客户端机器是否支持“video/x-ms-wmv”mime 类型?如果不是,它可能不知道要发送什么 mime 类型。
  • 您说您检查了客户端计算机上的标头。客户端发送了什么 mime 类型?请参阅related answer to another question,了解上传文件的 mime 类型。
  • 已经在原帖中了 - Content-Disposition: form-data;名称="fv_file"; filename="blahblah.wmv" 内容类型:video/x-ms-wmv
  • 与原始帖子一样,我检查了注册表中存在的条目和 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.wmv - 此条目的内容类型为 video/x-ms-wmv - WMV文件也在客户端上播放。
【解决方案2】:

你可能有一些奇怪的哑剧类型。如果您在标签周围使用 try/catch 块,则可以显示完整的错误消息。

例子:

<cftry>
    <cffile accept="video/x-ms-wmv" action="upload" destination="#ExpandPath('/client-images/')#" filefield="form.UploadFile" nameconflict="makeunique">
    <cfcatch type="any">
        <cfdump var="#cfcatch#" label="cfcatch">
    </cfcatch>
</cftry>

转储将显示 ColdFusion 认为已上传的 mime 类型。

这仅用于开发/分析,您不希望将转储呈现给常规站点访问者。

【讨论】:

  • 添加到原始帖子中,谢谢 - 与我在帖子开头发布的错误相同
  • Miguel-F 似乎有一个非常完整的答案或下一步该去哪里的建议。如果你弄明白了,请用这个问题记录下来,谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-03-20
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
相关资源
最近更新 更多