我有一个使用C#为后端构建的ASP.NET应用程序。我有一个上传pdf并检查MIME类型application / pdf的表单,以验证它是否是有效文件。我需要在单独的表格上为MP4文件执行此操作,但它似乎不起作用。它总是返回false。我检查了webkit中返回的MIME类型FileUpload.PostedFile.ContentType,它非常准确。然而,Firefox 5和IE 8分别测试了text / csv和application / octet-stream。这对我来说完全没有意义。我还尝试将扩展名映射到web.config文件中的正确MIME类型,如下所示:
<staticContent>
<mimeMap fileExtension=".mp4" mimeType="video/mp4" />
<mimeMap fileExtension=".m4v" mimeType="video/m4v" />
<mimeMap fileExtension=".ogg" mimeType="video/ogg" />
<mimeMap fileExtension=".ogv" mimeType="video/ogg" />
<mimeMap fileExtension=".webm" mimeType="video/webm" />
</staticContent>
在后端CS文件中,我用它来测试发布文件的内容类型:
if (file.PostedFile.ContentType == "video/mp4" ||
file.PostedFile.ContentType == "video/mpeg" ||
file.PostedFile.ContentType == "video/ogg" ||
file.PostedFile.ContentType == "video/quicktime" ||
file.PostedFile.ContentType == "video/webm")
return true;
else
return false;
另请注意我使用VS附带的本地开发服务器
答案 0 :(得分:4)
客户端的是浏览器,用于确定发送到服务器的内容类型。也就是说,浏览器会发送ASP.NET用来填充HttpPostedFile.ContentType属性的标头。
您无法使用IIS staticContent mime mappings 更改此设置,这些设置仅适用于服务器发送到客户端的文件(不是相反)。
您最好在您发布的if-else块之前使用c#方法中的某些自定义代码,以(尝试)确定真实 mime键入服务器端检查。 看看这两种导致不同结果和性能的方法:
注意:一般来说,您应该始终检查/确定服务器上的内容类型,而不要依赖客户端发送的内容类型(永远不要信任HttpPostedFile.ContentType):它可能是意外错误的(就像发生在你身上一样) ),由于浏览器不符合某些标准(IE已知会为某些图像格式发送错误的mime类型)而故意被一些hacky用户改变,错误...