znaczacy > comp.lang.* > comp.lang.java

Adam (29.11.2006, 20:04)
Witam,

mam następujący problem: na formularu jest pole typu file, przez które
uploaduje pliki na serwer (jboss), ponieważ pliki muszę zapisać na serwerze w
normalnej lokalizacji a pliki tymczasowe w jbossie są kasowane co chwilę :| to
trzymam pliki w pamięci. Jednak gdy rozmiar pliku przekracza zadeklarowany
przeze mnie w xml rozmiar to dostaję wyjątek:

org.springframework.web.multipart.MaxUploadSizeExc eededException: Maximum
upload size of 67108864 bytes exceeded; nested exception is
org.apache.commons.fileupload.FileUploadBase$SizeL imitExceededException: the
request was rejected because its size (123859124) exceeds the configured
maximum (67108864)
Caused by:
org.apache.commons.fileupload.FileUploadBase$SizeL imitExceededException: the
request was rejected because its size (123859124) exceeds the configured
maximum (67108864)
at
org.apache.commons.fileupload.FileUploadBase.parse Request(FileUploadBase.java:310)
at
org.apache.commons.fileupload.portlet.PortletFileU pload.parseRequest(PortletFileUpload.java:113)
at
org.springframework.web.portlet.multipart.CommonsP ortletMultipartResolver.resolveMultipart(CommonsPo rtletMultipartResolver.java:107)

Nie bardzo wiem w której fazie obsługi żądania jest to generowane (dobra wiem,
ale nie wiem jak to przechwycić :P), ma to miejsce przed isFormSubmission i
nie wiem jak to wyłapać dzieje się to w PortletDispatcher, do którego też
bardzo nie wiem jak się dobrać przez przebudowywania springa.. Dodam, że jest
to aplikacji portletowa w spring mvc.

Pozdrawiam,
Adam
Michal Jonik (30.11.2006, 20:11)
Adam napisał(a):
> [...]
> Nie bardzo wiem w której fazie obsługi żądania jest to generowane(dobra wiem,
> ale nie wiem jak to przechwycić :P), ma to miejsce przed isFormSubmission i
> nie wiem jak to wyłapać dzieje się to w PortletDispatcher, do którego też
> bardzo nie wiem jak się dobrać przez przebudowywania springa.. Dodam,że jest
> to aplikacji portletowa w spring mvc.


Jedyne rozwiązanie jakie znam, a które pozwoliło by powrócić do
oryginalnego formularza to rozszerzenie CommonsMultipartResolver i
przechwycenie wyjątku w metodzie resolveMultipart().
W razie wystąpienia wyjątku ustawiam flagę w atrybutach żądania i
zwracam new DefaultMultipartHttpServletRequest(request, new HashMap(),
new HashMap()). Kontroler natomiast odpowiednio reaguje na wystąpienie
tej flagi.

Nie jest to najlepsze rozwiązanie a do tego tracimy ewentualne
pozostałe parametry żądania (zastanawiam się czy w ogóle da się
je odzyskać bez dociągania reszty załącznika).

Chętnie dowiedziałbym się o jakimś lepszym rozwiązaniu tego
problemu od bardziej doświadczonych grupowiczów.
Podobne wątki