Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JSP: Get MIME Type on File Upload

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

like image 333
Victor Avatar asked Feb 23 '11 20:02

Victor


1 Answers

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:

  • How to upload files in JSP/Servlet?
  • How to check whether an uploaded file is an image?
like image 160
BalusC Avatar answered Oct 05 '22 05:10

BalusC