Java 取消文件上载时捕获异常?

Java 取消文件上载时捕获异常?,java,spring,servlets,grails,grails-2.0,Java,Spring,Servlets,Grails,Grails 2.0,我有一个上传表单,用户可以上传文件。用户提交表单后,可以通过以下方式取消请求: // abort old ajax request if(xhrObject && xhrObject.readyState != 4){ xhrObject.abort(); } 取消请求后,服务器将抛出以下错误: ERROR [/test].[default] - Servlet.service() for servlet [default] in

我有一个上传表单,用户可以上传文件。用户提交表单后,可以通过以下方式取消请求:

    // abort old ajax request
    if(xhrObject && xhrObject.readyState != 4){
        xhrObject.abort();
    }   
取消请求后,服务器将抛出以下错误:

ERROR [/test].[default]  - Servlet.service() for servlet [default] in context with path [/test] threw exception
Message: Could not parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Unexpected EOF read on the socket
    Line | Method
->> 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    615 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run . . . in java.lang.Thread
Caused by IOFileUploadException: Processing of multipart/form-data request failed. Unexpected EOF read on the socket
->>  371 | parseRequest in org.apache.commons.fileupload.FileUploadBase
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    126 | parseRequest in org.apache.commons.fileupload.servlet.ServletFileUpload
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run . . . in java.lang.Thread
Caused by EOFException: Unexpected EOF read on the socket
->>  976 | makeAvailable in org.apache.commons.fileupload.MultipartStream$ItemInputStream
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    886 | read      in     ''
|    101 | read . .  in java.io.InputStream
|     96 | copy      in org.apache.commons.fileupload.util.Streams
|     66 | copy . .  in     ''
|    366 | parseRequest in org.apache.commons.fileupload.FileUploadBase
|    126 | parseRequest in org.apache.commons.fileupload.servlet.ServletFileUpload
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run       in java.lang.Thread
我试图在控制器中捕获此错误,如下所示:

def save() {
try {
...
} catch (Exception ex) {...}
}
事实证明,这是行不通的


如何在我的操作中捕获已取消的上载?

我猜您的操作实际上从未调用过。是否有需要捕获异常的原因?通常情况下,如果最终用户取消上载,他们无论如何都不会看到异常。原因是,当用户更改要上载的文件时,我会取消上载。所以我想取消已经开始的旧文件ajax文件上传,并开始新的ajax文件上传。这里缺少一些信息。让我们再深入一点。您似乎有一个javascript客户端正在发出ajax多部分Post请求。如果用户选择不同的文件,第一次下载将取消。听起来是这样吗?如果是这样,服务器上的异常会造成什么危害?javascript客户端是否需要确认已取消上载?我想,我不认为有什么问题,在被取消的上传过程中出现异常实际上是很标准的。问题是javascript需要确认下载已被取消,才能正常工作。我真的希望你不要这么说。我想,取消成功与否有什么关系?对于客户端,他们应该继续前进,服务器应该返回什么?我个人认为在这种情况下寄回500美元是可以的。但是,如果您必须绝对返回某种消息,那么您要么在过滤器中捕获此异常,要么在Spring异常解析器中执行某些操作。