javahttpcontent-disposition

Get filename from Content-Disposition


I'm trying to extract the "filename" header that an HTTP server returns per RFC 6266 § 4.3 web standard when the file is being downloaded. Here's an example:

Content-Disposition: attachment; filename="IMG.JPG"

I know that the filename is stored in the Content-Disposition header, how could I get that using Java?


Solution

  • If you uploaded the file using JavaEE 6 with HttpServletRequest.getPart:

    Part part = request.getPart("xxx"); // input type=file name=xxx
    String disposition = part.getHeader("Content-Disposition");
    String fileName = disposition.replaceFirst("(?i)^.*filename=\"?([^\"]+)\"?.*$", "$1");
    

    See Part.


    As @Marc mentioned I did not treat URL encoding. (He also made the quotes around the filename optional.)

    fileName = URLDecoder.decode(fileName, StandardCharsets.ISO_8859_1);
    

    Not checked, but HTTP encoding for headers should be the default ISO-8859-1.