Skip to content
Snippets Groups Projects
Commit ef29d5b7 authored by ribeaudc's avatar ribeaudc
Browse files

change: - 'maxInMemorySize' to 1MB.

- Ensure that the uploaded files are transferred before HTTP request ends. We will manually remove these files.

SVN: 9432
parent fb127bdb
No related branches found
No related tags found
No related merge requests found
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
--> -->
<bean id="multipartResolver" <bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxInMemorySize" value="10000000" /> <!-- Default is 10240 (10kB). Set to 1MB (1048576). -->
<property name="maxInMemorySize" value="1048576" />
</bean> </bean>
</beans> </beans>
...@@ -16,11 +16,16 @@ ...@@ -16,11 +16,16 @@
package ch.systemsx.cisd.openbis.generic.client.web.server; package ch.systemsx.cisd.openbis.generic.client.web.server;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.apache.commons.io.FileUtils;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import ch.systemsx.cisd.common.exceptions.WrappedIOException;
import ch.systemsx.cisd.common.spring.IUncheckedMultipartFile; import ch.systemsx.cisd.common.spring.IUncheckedMultipartFile;
import ch.systemsx.cisd.common.spring.MultipartFileAdapter; import ch.systemsx.cisd.common.spring.MultipartFileAdapter;
...@@ -31,6 +36,8 @@ import ch.systemsx.cisd.common.spring.MultipartFileAdapter; ...@@ -31,6 +36,8 @@ import ch.systemsx.cisd.common.spring.MultipartFileAdapter;
*/ */
public final class UploadedFilesBean public final class UploadedFilesBean
{ {
private static final String CLASS_SIMPLE_NAME = UploadedFilesBean.class.getSimpleName();
private List<IUncheckedMultipartFile> multipartFiles = new ArrayList<IUncheckedMultipartFile>(); private List<IUncheckedMultipartFile> multipartFiles = new ArrayList<IUncheckedMultipartFile>();
/** /**
...@@ -39,10 +46,27 @@ public final class UploadedFilesBean ...@@ -39,10 +46,27 @@ public final class UploadedFilesBean
*/ */
private String sessionKey; private String sessionKey;
private final File createTempFile() throws IOException
{
final File tempFile = File.createTempFile(CLASS_SIMPLE_NAME, null);
tempFile.deleteOnExit();
return tempFile;
}
public final void addMultipartFile(final MultipartFile multipartFile) public final void addMultipartFile(final MultipartFile multipartFile)
{ {
assert multipartFile != null : "Unspecified multipart file."; assert multipartFile != null : "Unspecified multipart file.";
multipartFiles.add(new MultipartFileAdapter(multipartFile)); try
{
final File tempFile = createTempFile();
multipartFile.transferTo(tempFile);
final FileMultipartFileAdapter multipartFileAdapter =
new FileMultipartFileAdapter(multipartFile, tempFile);
multipartFiles.add(multipartFileAdapter);
} catch (final IOException ex)
{
throw new WrappedIOException(ex);
}
} }
public final Iterable<IUncheckedMultipartFile> iterable() public final Iterable<IUncheckedMultipartFile> iterable()
...@@ -50,11 +74,25 @@ public final class UploadedFilesBean ...@@ -50,11 +74,25 @@ public final class UploadedFilesBean
return multipartFiles; return multipartFiles;
} }
/**
* Returns the number of files uploaded.
*/
public final int size() public final int size()
{ {
return multipartFiles.size(); return multipartFiles.size();
} }
/**
* Deletes the transferred files.
*/
public final void deleteTransferredFiles()
{
for (final IUncheckedMultipartFile multipartFile : iterable())
{
((FileMultipartFileAdapter) multipartFile).destFile.delete();
}
}
public final String getSessionKey() public final String getSessionKey()
{ {
return sessionKey; return sessionKey;
...@@ -64,4 +102,53 @@ public final class UploadedFilesBean ...@@ -64,4 +102,53 @@ public final class UploadedFilesBean
{ {
this.sessionKey = sessionKey; this.sessionKey = sessionKey;
} }
//
// Helper classes
//
private final static class FileMultipartFileAdapter extends MultipartFileAdapter
{
private final File destFile;
FileMultipartFileAdapter(final MultipartFile multipartFile, final File destFile)
{
super(multipartFile);
this.destFile = destFile;
}
//
// MultipartFileAdapter
//
@Override
public final byte[] getBytes()
{
try
{
return FileUtils.readFileToByteArray(destFile);
} catch (final IOException ex)
{
throw new WrappedIOException(ex);
}
}
@Override
public final InputStream getInputStream()
{
try
{
return FileUtils.openInputStream(destFile);
} catch (final IOException ex)
{
throw new WrappedIOException(ex);
}
}
@Override
public final void transferTo(final File dest)
{
throw new UnsupportedOperationException();
}
}
} }
...@@ -130,6 +130,7 @@ public final class GenericClientService extends AbstractClientService implements ...@@ -130,6 +130,7 @@ public final class GenericClientService extends AbstractClientService implements
throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
{ {
HttpSession session = null; HttpSession session = null;
UploadedFilesBean uploadedFiles = null;
try try
{ {
final String sessionToken = getSessionToken(); final String sessionToken = getSessionToken();
...@@ -138,8 +139,7 @@ public final class GenericClientService extends AbstractClientService implements ...@@ -138,8 +139,7 @@ public final class GenericClientService extends AbstractClientService implements
&& session.getAttribute(sessionKey) instanceof UploadedFilesBean : String && session.getAttribute(sessionKey) instanceof UploadedFilesBean : String
.format("No UploadedFilesBean object as session attribute '%s' found.", .format("No UploadedFilesBean object as session attribute '%s' found.",
sessionKey); sessionKey);
final UploadedFilesBean uploadedFiles = uploadedFiles = (UploadedFilesBean) session.getAttribute(sessionKey);
(UploadedFilesBean) session.getAttribute(sessionKey);
final BisTabFileLoader<NewSample> tabFileLoader = final BisTabFileLoader<NewSample> tabFileLoader =
new BisTabFileLoader<NewSample>(new IParserObjectFactoryFactory<NewSample>() new BisTabFileLoader<NewSample>(new IParserObjectFactoryFactory<NewSample>()
{ {
...@@ -174,6 +174,10 @@ public final class GenericClientService extends AbstractClientService implements ...@@ -174,6 +174,10 @@ public final class GenericClientService extends AbstractClientService implements
throw UserFailureExceptionTranslator.translate(e); throw UserFailureExceptionTranslator.translate(e);
} finally } finally
{ {
if (uploadedFiles != null)
{
uploadedFiles.deleteTransferredFiles();
}
if (session != null) if (session != null)
{ {
session.removeAttribute(sessionKey); session.removeAttribute(sessionKey);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment