Backport the DiskFileUploadReciever changes - 360345: Fileupload always error when upload file with 1 character file name
https://bugs.eclipse.org/bugs/show_bug.cgi?id=360345
diff --git a/bundles/org.eclipse.rap.rwt.supplemental.fileupload/src/org/eclipse/rap/rwt/supplemental/fileupload/DiskFileUploadReceiver.java b/bundles/org.eclipse.rap.rwt.supplemental.fileupload/src/org/eclipse/rap/rwt/supplemental/fileupload/DiskFileUploadReceiver.java
index e34feee..424073c 100644
--- a/bundles/org.eclipse.rap.rwt.supplemental.fileupload/src/org/eclipse/rap/rwt/supplemental/fileupload/DiskFileUploadReceiver.java
+++ b/bundles/org.eclipse.rap.rwt.supplemental.fileupload/src/org/eclipse/rap/rwt/supplemental/fileupload/DiskFileUploadReceiver.java
@@ -21,8 +21,9 @@
* A file upload receiver that stores received files on disk.
*/
public class DiskFileUploadReceiver extends FileUploadReceiver {
-
+
private static final String DEFAULT_TARGET_FILE_NAME = "upload.tmp";
+ private static final String TEMP_DIRECTORY_PREFIX = "fileupload_";
private File targetFile;
@@ -57,17 +58,20 @@
if( details != null && details.getFileName() != null ) {
fileName = details.getFileName();
}
- return File.createTempFile( createPrefix( fileName ), createSuffix( fileName ) );
+ File result = new File( createTempDirectory(), fileName );
+ result.createNewFile();
+ return result;
}
- private String createPrefix( String fileName ) {
- int dotIndex = fileName.lastIndexOf( '.' );
- return dotIndex == -1 ? fileName : fileName.substring( 0, dotIndex + 1 );
- }
-
- private String createSuffix( String fileName ) {
- int dotIndex = fileName.lastIndexOf( '.' );
- return dotIndex == -1 ? null : fileName.substring( dotIndex );
+ private static File createTempDirectory() throws IOException {
+ File result = File.createTempFile( TEMP_DIRECTORY_PREFIX, "" );
+ result.delete();
+ if( result.mkdir() ) {
+ result.deleteOnExit();
+ } else {
+ throw new IOException( "Unable to create temp directory: " + result.getAbsolutePath() );
+ }
+ return result;
}
private static void copy( InputStream inputStream, OutputStream outputStream )
diff --git a/tests/org.eclipse.rap.rwt.supplemental.fileupload.test/src/org/eclipse/rap/rwt/supplemental/fileupload/DiskFileUploadReceiver_Test.java b/tests/org.eclipse.rap.rwt.supplemental.fileupload.test/src/org/eclipse/rap/rwt/supplemental/fileupload/DiskFileUploadReceiver_Test.java
index 8054ab7..666df5e 100644
--- a/tests/org.eclipse.rap.rwt.supplemental.fileupload.test/src/org/eclipse/rap/rwt/supplemental/fileupload/DiskFileUploadReceiver_Test.java
+++ b/tests/org.eclipse.rap.rwt.supplemental.fileupload.test/src/org/eclipse/rap/rwt/supplemental/fileupload/DiskFileUploadReceiver_Test.java
@@ -43,8 +43,7 @@
createdFile = receiver.createTargetFile( details );
assertTrue( createdFile.exists() );
- assertTrue( createdFile.getName().startsWith( "foo." ) );
- assertTrue( createdFile.getName().endsWith( ".bar" ) );
+ assertEquals( "foo.bar", createdFile.getName() );
}
public void testCreatedTargetFilesDiffer() throws IOException {
@@ -80,8 +79,7 @@
assertNotNull( createdFile );
assertTrue( createdFile.exists() );
- assertTrue( createdFile.getName().startsWith( "upload." ) );
- assertTrue( createdFile.getName().endsWith( ".tmp" ) );
+ assertEquals( "upload.tmp", createdFile.getName() );
assertEquals( content, FileUploadTestUtil.getFileContents( createdFile ) );
}
}