It sounds like as if you're homegrowing a multipart/form-data
parser. I wouldn't recommend to do that. Rather use a decent one like Apache Commons FileUpload. For uploaded files, it offers a FileItem#getContentType()
to extract the client-specified content type, if any.
String contentType = item.getContentType();
If it returns null
(just because the client didn't specify it), then you can take benefit of ServletContext#getMimeType()
based on the file name.
String filename = FilenameUtils.getName(item.getName());
String contentType = getServletContext().getMimeType(filename);
This will be resolved based on <mime-mapping>
entries in servletcontainer's default web.xml
(in case of for example Tomcat, it's present in /conf/web.xml
) and also on the web.xml
of your webapp, if any, which can expand/override the servletcontainer's default mappings.
You however need to keep in mind that the value of the multipart content type is fully controlled by the client and also that the client-provided file extension does not necessarily need to represent the actual file content. For instance, the client could just edit the file extension. Be careful when using this information in business logic.
Related:
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…