Stephan Markwalder created FILEUPLOAD-295:
---------------------------------------------
Summary: DiskFileItem: getStoreLocation() may return non-existing
file
Key: FILEUPLOAD-295
URL: https://issues.apache.org/jira/browse/FILEUPLOAD-295
Project: Commons FileUpload
Issue Type: Bug
Affects Versions: 1.4
Reporter: Stephan Markwalder
*How to reproduce*
# Create a DiskFileItem with threshold set to -1 (force save to disk).
# Get OutputStream from DiskFileItem.
# Close OutputStream without calling any write(...) method (e.g., because the
uploaded file is empty).
# Test the return value of the following methods:
** isInMemory() --> returns false (OK)
** getSize() --> returns 0 (OK)
** getStoreLocation() --> returns a File object (OK), but the file does not
exist (FAILURE).
I think this is an inconsistency. If isInMemory() returns false adn
getStoreLocation() returns a File object, the file should also exist.
Java code (run with -ea to enable assertions):
{code:java}
// create a DiskFileItem
int sizeThreshold = -1; // always store to disk
File repository = null; // use temporary folder
DiskFileItem item = new DiskFileItem("file", "text/plain", false, "file.txt",
sizeThreshold, repository);
OutputStream outputStream = item.getOutputStream();
// do not write to stream <-- IMPORTANT
outputStream.close();
// assert that data has been stored to disk
assert !item.isInMemory(); // pass
assert item.getSize() == 0; // pass
assert item.getStoreLocation() != null; // pass
assert item.getStoreLocation().isFile(); // fails
{code}
When adding a call to outputStream.write(new byte[0]), the behavior changes and
the empty file is created on disk.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)