Hi,

I'm using Tomcat 8.5.15 on Linux (CentOS 7).

Imagine the following scenario:

I have a web page with a form with a structure like:
<form  method="POST" action="..." enctype="multipart/form-data">
 <input type="file" name="file1">
 <input type="file" name="file2">
 ...
</form>

The user selects two different files.  However, both files have the same name (they reside in different directories on the users computer).  So the form is like:  <input type="file" name="file1" value="somefile.jpg">  // This file came from /home/user/pics1/somefile.jpg  <input type="file" name="file2" value="somefile.jpg">  // This file came from /home/user/pics2/somefile.jpg Although both these files have the same name, they are different contents (different images).

The user then submits the form.

My tomcat is configured to accept multipart/form-data posts.  Here is the relevant portion in the WEB-INF/web.xml:
    <multipart-config>
      <max-file-size>505242880</max-file-size>
      <max-request-size>505242880</max-request-size>
      <file-size-threshold>5000</file-size-threshold>
      <location>/home/pics</location>
    </multipart-config>

Assuming both the files are larger than 5000 bytes, then both should be saved in the /home/pics directory. However (and this is the issue) given that they have the same name, then one file over-writes the second file.  The result is that the "value" of one of the input parameters is essentially lost.  Or to put it another way, in the /home/pics directory, only a single file version of "somefile.jpg" is saved, and one is lost (over-written).

I have reviewed the relevant RFC:
https://www.ietf.org/rfc/rfc2388.txt
However it is essentially silent on this particular issue.  The issue being: how to handle multiple parts with the same name.

One possible solution is to ask the user to rename the files to be unique before uploading.  That would be a work around for desktop/laptop users.  However we actually discovered this issue on iOS devices...  When Safari or Chrome on iOS use the form, then the form shows a "Browse" button.  That button allows the user to take a picture with the device camera.  The file name of the image is always "image.jpg".  Both form fields have the same file name value, just "image.jpg".  This then causes the problem.  There is no reasonable way to rename the files on iOS devices that are captured from the camera.  On Android devices, as a point of comparison, each camera image is saved with a unique file name, and that is what the browser processes.

My desired solution would be to have the multipart processor work to be able to handle this scenario.  I think the best solution would be to rename the file when duplicates are found in the request.  Or something similar.

I did a bunch of searching on the mailing list to see if this has come up before.  I didn't find anything. Apologies if it is a solved issue some how and I just didn't find it.

Thank-you for your help with this.
Alex.


Reply via email to