文件存在时Grails 2.4.4文件上载错误

时间:2015-05-25 03:06:51

标签: grails file-upload

我有一个正确接收文件并将其保存到目标文件夹而没有问题的操作。

当目标文件夹具有相同名称的文件时,方法transferTo首先删除现有文件,然后复制新文件(http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/multipart/commons/CommonsMultipartFile.html#transferTo-java.io.File-)。

但是如果目标文件存在,Grails会抛出此错误,并删除现有文件,但不会复制上传的文件。

我在WinXP工作,所以我不认为这是权限问题(文件被删除,所以我猜与权限无关)。

| Error 2015-05-24 23:47:58,199 [http-bio-8090-exec-3] ERROR errors.GrailsExceptionResolver  - FileNotFoundException occurred when processing request: [POST] /ehr/test/upload - parameters:
doit: upload
overwrite: true
SYNCHRONIZER_TOKEN: 8deaf46b-b6ff-4362-ac70-7223f37ae806
SYNCHRONIZER_URI: /ehr/test/upload
opts\Signos.opt (Access is denied). Stacktrace follows:
Message: opts\Signos.opt (Access is denied)
    Line | Method
->>  221 | <init>    in java.io.FileOutputStream
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|    171 | <init>    in     ''
|    417 | write . . in org.apache.commons.fileupload.disk.DiskFileItem
|     85 | upload    in test.TestController
|    198 | doFilter  in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter  in grails.plugin.cache.web.filter.AbstractFilter
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    744 | run . . . in java.lang.Thread

上传操作如下:

def upload(boolean overwrite)
{
  if (params.doit)
  {
     def errors = []

     def f = request.getFile('opt')
     def xml = new String( f.getBytes() )
     def destination = config.opt_repo + f.getOriginalFilename() 
     File fileDest = new File( destination )

     if (!overwrite && fileDest.exists())
     {
        errors << "The OPT already exists, do you want to overwrite?"
        return [errors: errors, ask_overwrite: true]
     }

     // Some validation logic here ...

     if (errors.size() == 0)
     {
        // http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/multipart/commons/CommonsMultipartFile.html#transferTo-java.io.File-
        // If the file exists, it will be deleted first
        f.transferTo(fileDest)
     }
  }
}

0 个答案:

没有答案