JSP:在文件上载中获取MIME类型
我正在上传文件,我想从上传的文件中获取Mime类型。
我试图使用request.getContentType() ,但是当我调用时:
String contentType = req.getContentType();
它将返回:
多部分/格式的数据; 边界= ————————— 310662768914663
我怎样才能得到正确的价值?
提前致谢
这听起来好像你正在为一个multipart/form-data
解析器做主。 我不建议那样做。 而是使用像Apache Commons FileUpload这样的体面的。 对于上传的文件,它提供了FileItem#getContentType()
来提取客户端指定的内容类型(如果有)。
String contentType = item.getContentType();
如果它返回null
(只是因为客户端没有指定它),那么你可以根据文件名利用ServletContext#getMimeType()
。
String filename = FilenameUtils.getName(item.getName()); String contentType = getServletContext().getMimeType(filename);
这将基于servletcontainer的默认web.xml
条目(例如Tomcat,它存在于/conf/web.xml
)以及webapp的web.xml
(如果有),它可以扩展/覆盖servletcontainer的默认映射。
但是,您需要记住,多部分内容类型的值完全由客户端控制,并且客户端提供的文件扩展名不一定需要表示实际的文件内容。 例如,客户端可以只编辑文件扩展名。 在业务逻辑中使用此信息时要小心。
有关:
- 如何在JSP / Servlet中上传文件?
- 如何检查上传的文件是否是图像?
只需使用:
public String ServletContext.getMimeType(String file)
您可以使用MimetypesFileTypeMap
String contentType = new MimetypesFileTypeMap().getContentType(fileName)); // gets mime type
但是,如果尚未列出文件类型,则会遇到编辑mime.types文件的开销。 (对不起,我把它拿回来,因为你可以通过编程方式向地图添加实例,这将是它检查的第一个地方)
- 识别多文件上载中的每个字段
- 如何移动Primefaces-Upload-Temp-Files而不是进行时间密集的复制过程?
- 上传文件时出现NullPointerException
- ServletFileUpload #parseRequest(request)返回一个空列表
- Struts2 Fileupload在动作类中给出null文件
- 如何在fileupload struts2中删除.tmp文件
- 文件上传“multipart / form”exceptionorg.apache.commons.fileupload.FileUploadBase $ InvalidContentTypeException
- Apache commons fileupload“Streaming API”
- 如何处理MaxUploadSizeExceededException