2014-03-13 52 views
0

上传WMV和MPEG文件我有问题, '视频/ X-MS-WMV'(ETC)是接受列表上 - 我得到的错误的ColdFusion 10 CFFILE接受的MIME类型无法识别

MIME类型或上传的文件 应用/八位字节流的扩展不是由服务器

使用Chrome接受,我检查报头和它读取

内容Disposit ion:form-data; NAME = “fv_file”;文件名= “blahblah.wmv” 内容类型:视频/ X-MS-WMV

客户机也有出现正确的WMV注册表项。

服务器端 Apache配置为使用操作系统MIME类型文件:/etc/mime.types。 此文件包含WMV和MPEG条目: 视频/ X-MS-WMV WMV视频 /MPEG MPEG

如何CF10确定的MIME类型?我很努力地找出这些信息。 有没有人有解决方案?

由于

编辑 - 添加的代码

<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-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 
+0

Adob​​e对''在ColdFusion 10中的工作方式做了几处更改。你能否包括你的''代码? –

+0

您可能还想确保您的mime类型位于正在处理的服务器中。 – fyroc

+0

我编辑了原始问题以包含代码 - @Cory失败,我在哪里看?这是我的原始问题,CF从哪里获取信息?它在上面的Apache中被指定为 –

回答

6

我将不得不猜测,直到我可以看到你的 <cffile>代码,但我的猜测是,你有没有允许的的 accept属性下适当的MIME类型 <cffile>标签。


现在你已经包含在您的代码我的假设得到了证实:你有没有允许<cffile>标签的accept属性下适当的MIME类型。

请参阅下文了解更多详情。

一些变化的<cffile>标签中的ColdFusion 10是如何工作的,您可能会或可能不知道,在ColdFusion的10,他们增加了strict属性标签(documentation reference)制成。

  • 当严格为真时,仅MIME类型或MIME类型和扩展名的组合是允许在接受属性。由于严格默认为true,所以您应该为accept属性指定MIME类型。
  • 如果strict为false,则可以将MIME类型或扩展或两者的组合指定为accept属性的值。有关更多信息,请参阅this blog entry

不仅是属性添加,但对于strict属性的默认值是true。因为你没有在你的代码中指定它,所以

注:如果您收到类似“上传的文件(图片/ JPEG)的MIME类型不被服务器接受”错误,输入接受=“图像/ 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。 (一个旧的文章,但还是有相关的提示。)

一对夫妇的其他引用的我发现,可能会有所帮助:

+0

如果它不在接受列表中,是不是说“video/x-ms-wmv”不被接受,而不是“application/octet-stream”。我已经试图找出浏览器是否导致问题 - 我检查了标题和我的注册表设置。你确定错误是由于浏览器? –

+0

问题是,正如错误所述,上传文件的MIME类型是“application/octet-stream”而不是“video/x-ms-wmv”。我试着在我的回答中指出,用户的浏览器会将mime类型发送到ColdFusion服务器。 CF服务器实际上并不确定MIME类型,它使用浏览器发送的内容和文件的文件扩展名。您是否阅读过我收录的参考资料?他们提供了更多关于该过程的信息。你的客户端机器是否支持“video/x-ms-wmv”mime类型?如果不是,它可能不知道要发送的MIME类型。 –

+0

你说你检查了客户端机器上的标题。客户端发送了什么MIME类型?有关上传文件的MIME类型,请参阅此[与其他问题相关的答案](http://stackoverflow.com/a/12061617/1636917)。 –

0

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

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

+0

添加到原始文章,谢谢 - 同样的错误,因为我在我的帖子开始张贴 –

+0

Miguel-F似乎有一个相当完整的答案或建议下一步看什么。如果你知道它,请记下这个问题,谢谢! –