Reputation: 8480
I'm doing a file upload, and I want to get the Mime type from the uploaded file.
I was trying to use the request.getContentType(), but when I call:
String contentType = req.getContentType();
It will return:
multipart/form-data; boundary=---------------------------310662768914663
How can I get the correct value?
Thanks in advance
Upvotes: 6
Views: 30766
Reputation: 39
You could use MimetypesFileTypeMap
String contentType = new MimetypesFileTypeMap().getContentType(fileName)); // gets mime type
However, you would encounter the overhead of editing the mime.types file, if the file type is not already listed. (Sorry, I take that back, as you could add instances to the map programmatically and that would be the first place that it checks)
Upvotes: 0
Reputation: 1108537
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.
Upvotes: 22
Reputation: 26799
just use:
public String ServletContext.getMimeType(String file)
Upvotes: 0