ColdFusion 10 CFFILE接受mimetype无法识别

时间:2014-03-13 16:05:06

标签: coldfusion mime-types coldfusion-10

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

  

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

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

  

内容 - 处置:表单数据; NAME = “fv_file”;文件名= “blahblah.wmv”   内容类型:video / x-ms-wmv

客户端计算机也有WMV注册表项,看似正确。

服务器端 Apache配置为使用OS mime类型文件:/etc/mime.types。 该文件包含wmv和mpeg的条目: video / x-ms-wmv wmv video / 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的值是

  

视频/ MP4,视频/ MPEG,视频/ QuickTime的,视频/ X-msvideo,视频/ X-SGI-电影,视频/ AVI,视频/ vnd.vivo,应用/ vnd.rn-的RealMedia,视频/ VND .rn-的RealVideo,音频/ vnd.rn-的RealAudio,音频/ X-PN-的RealAudio,视频/ X-MS-WMV,音频/ MPEG,视频/ MPG,视频/ MPE,视频/ X-MS-ASF,视频/ 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

2 个答案:

答案 0 :(得分:6)

我必须推测,直到我看到你的<cffile>代码,但我的猜测是你没有在accept <cffile>属性下允许适当的mime类型标签


现在您已经包含了我的代码,我的假设已得到确认:您未在accept标记的<cffile>属性下允许使用相应的mime类型。

有关详细信息,请参阅下文。

对于<cffile>标记在ColdFusion 10中的工作方式进行了一些更改。您可能会或可能不会意识到,在ColdFusion 10中,他们将strict属性添加到标记(documentation reference )。

  
      
  • 当strict为true时,accept属性中只允许MIME类型或MIME类型和扩展名的组合。由于默认情况下strict为true,因此应为accept属性指定MIME类型。
  •   
  • 当strict为false时,可以将MIME类型或扩展名或两者的组合指定为accept属性的值。有关详细信息,请参阅this blog entry
  •   

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

  

注意:如果您收到类似&#34的错误;服务器未接受上传文件(图片/ jpeg)的MIME类型&#34;,请输入accept =&#34 ;图像/ JPEG&#34;接受JPEG文件。

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

  

cffile accept属性使用浏览器发送给服务器的mime类型。再次阅读...您的浏览器告诉cffile mime类型是什么。欺骗mime类型非常容易

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

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

答案 1 :(得分:0)

你可能有一些奇怪的哑剧类型。如果在标记周围使用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类型。

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