2010-08-09 10 views
5

मेरे पास मेरे नियंत्रक में एक बहुत ही मूल अपलोड कार्रवाई है। यह नीचे की कार्रवाई की तरह कुछ दिखता है। यह बहुत अच्छा काम करता है। एकमात्र समस्या जो मैं देख रहा हूं वह तब होता है जब कोई उपयोगकर्ता अपलोड को रद्द करता है (या उनके ब्राउज़र पर हिट स्टॉप)। मैं सही ढंग से ठीक करने में सक्षम हूं, लेकिन मेरे लॉग में एक अपरिचित अपवाद देखने से पहले नहीं। अपवाद नीचे सूचीबद्ध है। बेकार अपवाद को सही तरीके से पकड़ने के तरीके पर कोई मदद या फीडबैक की सराहना की जाएगी। ऐसा लगता है कि यह क्लाइंट और नियंत्रक कार्रवाई के बीच कहीं भी हो रहा है क्योंकि अपवाद प्रदर्शित किया जा रहा है लेकिन कार्रवाई में लॉग संदेश में से कोई भी दिखाई नहीं दे रहा है।Grails - अपलोड को रोकने/रद्द करने पर अपवाद

def upload = { 
    def f = null 
    try { 
     f = request.getFile('assetFile') 
     if(!f || f.empty) { 
      log.warn "File is empty" 
      render(view:'upload') 
      return 
     } 
    } catch (Exception e) { 
     log.warn "Caught exception:", e 
     render(view:'upload') 
     return 
    } 
} 

अपवाद है:

2010-08-06 15:33:22,826 ERROR [TP-Processor8] filter.UrlMappingsFilter - Error when matching URL mapping [/(*)/(*)?/(*)?]:Could not parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly 
    org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly 
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) 
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) 
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
      at org.jsecurity.web.servlet.JSecurityFilter.doFilterInternal(JSecurityFilter.java:384) 
      at org.jsecurity.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:183) 
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) 
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) 
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) 
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) 
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) 
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) 
      at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200) 
      at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291) 
      at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:775) 
      at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:704) 
      at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:897) 
      at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) 
      at java.lang.Thread.run(Thread.java:619) 
    Caused by: org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly 
      at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:367) 
      at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126) 
      ... 25 more 
    Caused by: org.apache.commons.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly 
      at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:983) 
      at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:887) 
      at java.io.InputStream.read(InputStream.java:85) 
      at org.apache.commons.fileupload.util.Streams.copy(Streams.java:94) 
      at org.apache.commons.fileupload.util.Streams.copy(Streams.java:64) 
      at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:362) 
      ... 26 more 

उत्तर

2

मैं इस पर बहुत देर हो रही है, लेकिन मैं तो बस आज एक ही समस्या में पड़ गए और एक सर्वलेट फ़िल्टर लगाकर इसका समाधान नहीं (मैं भी एक Grails फिल्टर की कोशिश की, लेकिन इसे मारने से पहले अपवाद फेंक दिया गया है)।

सबसे पहले आप अपनी परियोजना में एक web.xml बनाने की जरूरत ...

grails install-templates

web.xml लिए एक फ़िल्टर जोड़ें (किसी अन्य फिल्टर से पहले फिल्टर-मानचित्रण डाल करने के लिए यकीन नहीं कर रहे हैं) ...

<filter> 
    <filter-name>upload</filter-name> 
    <filter-class>com.myProject.UploadFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>upload</filter-name> 
    <url-pattern>/media/uploadMediaAsset/*</url-pattern> 
</filter-mapping> 

फिल्टर वर्ग बनाएं ...

package com.myProject 

import javax.servlet.* 

import org.apache.commons.logging.Log 
import org.apache.commons.logging.LogFactory 

import org.springframework.web.multipart.MultipartException 

public class UploadFilter implements Filter { 

private Log log = LogFactory.getLog(getClass()) 

public void init(FilterConfig filterConfig) throws ServletException { /* Do nothing */ } 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { 

    log.debug 'Making sure file upload gets here.' 

    try { 
     chain.doFilter(request, response) 
    } catch (MultipartException mpE) { 
     log.error mpE 
    } 
} 

public void destroy() { /* Do nothing */ } 

}

संबंधित मुद्दे