【问题标题】:multiple file upload in grailgrail中的多个文件上传
【发布时间】: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 进行复制?

-麦克

【问题讨论】:

    标签: java grails


    【解决方案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,则会失败。 -迈克
    • 我不知道您是否可以在重定向或从一个控制器转发到另一个控制器后访问文件上传。这是与原始问题不同的问题,应单独发布。另外,如果我的回答回答了您的第一个问题,那么如果您接受它会对其他人有所帮助,如果它是一个很好的答案,也将不胜感激。
    猜你喜欢
    • 2019-01-29
    • 2016-08-10
    • 1970-01-01
    • 2012-04-26
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多