grail中的多个文件上传

Posted

技术标签:

【中文标题】grail中的多个文件上传【英文标题】:multiple file upload in grail 【发布时间】:2014-11-27 08:45:34 【问题描述】:

我正在尝试使用请求或 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 行收到一个 groovy 运行时错误 - 错误消息是:

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

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

查看此处选择的两个文件的输出:

名称:文件[] 原始文件名:for-sale.gif 内容类型:图像/gif

名称:文件[] 原始文件名:front.gif 内容类型:图像/gif

如何调用 transferTo 进行复制?

-麦克

【问题讨论】:

【参考方案1】:

如果您查看CommonsMultiPartFile 的文档,您会发现问题在于您构建文件的方式。

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

应该是:

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

您需要访问文件的originalFilename 属性。

【讨论】:

工作正常 - 也尝试了 file.originalFilename,但失败并出现 groovy.lang.MissingMethodException 错误和消息:No signature of method: org.springframework.web.multipart.commons.CommonsMultipartFile.originalFilename() is applicable for argument types: () values: [] Possible solutions: getOriginalFilename()。然而上面的打印行正确显示了 originalFilename - 不知道为什么? 是否可以对已传递给与在输入 html 标记中设置的接收它的初始操作不同的操作的多部分文件对象运行请求推荐。我可以访问重定向操作中的字符串 - form:org.springframework.web.multipart.commons.CommonsMultipartFile@35d79259 但我无法运行请求命令,例如 request.getFiles - 也如果我尝试将其转换为 MultipartFile,则会失败。 -迈克 我不知道您是否可以在重定向或从一个控制器转发到另一个控制器后访问文件上传。这是与原始问题不同的问题,应单独发布。另外,如果我的回答回答了您的第一个问题,那么如果您接受它会对其他人有所帮助,如果它是一个很好的答案,也将不胜感激。

以上是关于grail中的多个文件上传的主要内容,如果未能解决你的问题,请参考以下文章

大型文件上传期间的 Grails 连接超时

Grails3文件上传maxFileSize限制

如何使用GoogleServiceAuthentication类将文件上传到Grails中的google存储?

Grails文件上传:视图渲染时如何设置输入文件的值

Grails 文件上传 - 如何识别文件和/或内容类型?

Grails JAX-RS REST 多部分文件上传