2014-10-02 83 views
1

我想复制使用该请求或HttpServletRequest功能的多个文件。多个文件上传在圣杯

我已经能够循环通过我在那里访问的MultipartFile对象为每个文件在控制器的行动所有选中的文件 - 这里是动作代码:

request.getFileNames().each{ 
    request.getFiles(it).each 
    { file -> 
     // loop through all files selected 
    println "name: $file.name Originalfilename: $file.originalFilename contentType: $file.contentType" 
     file.transferTo(new File(userDir, file))     
    } // eo for loop 
} // eo requect.getFiles().each.... 

我得到一个常规运行时错误该行的transferTo - 错误消息是:

找不到匹配的构造函数:java.io.File中(java.io.File中,org.springframework.web.multipart.commons.CommonsMultipartFile)

如果我注释掉transferTo行的打印输出行,循环会生成关于每个选定文件的正确的MultipartFile信息。

参见两个文件输出选择这里:

名:文件[] Originalfilename:换sale.gif的contentType:图像/ GIF

名:文件[] Originalfilename:front.gif的contentType :image/gif

如何调用transferTo来执行复制?

-Mike

回答

0

如果你看一下文档中的CommonsMultiPartFile,你会看到你的问题是,你正在构建你的文件的方式。

file.transferTo(new File(userDir, file)) 

应该是:

file.transferTo(new File(userDir, file.getOriginalFilename())) 

您需要访问的文件originalFilename财产。

+0

工作正常 - 也尝试过'file.originalFilename',但是失败时出现了一个** groovy.lang.MissingMethodException **错误和消息:'没有方法的签名:org.springframework.web.multipart.commons.CommonsMultipartFile。 originalFilename()适用于参数类型:()values:[]可能的解决方案:getOriginalFilename()'。然而上面的打印行显示正确的原始文件名 - 不知道为什么? – mikek 2014-10-02 13:35:46

+0

是否有可能对已传递给接收它的输入html标记中设置的初始操作的不同操作的多部分文件对象运行请求命令。 我可以访问重定向操作中的字符串 - **表单:[email protected]5d79259** 但我无法运行request.getFiles之类的请求命令 - 也如果我尝试将其转换为MultipartFile,则失败。 -mike – mikek 2014-10-03 14:21:05

+0

我不知道是否可以在重定向或从一个控制器转发到另一个控制器后访问文件上载。这是与原始问题不同的问题,应单独发布。另外,如果我的回答回答了你的第一个问题,那么如果你接受它,这对他人会有帮助,如果这是一个很好的答案,那么upvote也是值得赞赏的。 – 2014-10-03 14:25:03