0

我正在使用一个将文件作为 CommonsMultipartFile 上传的插件。上传工作正常,但我正在尝试使用另一个插件来读取文件头(mp3 头),但它不会使用 CommonsMultipartFile,只需要常规文件。有没有办法将 CommonsMultipartFile 转换为文件或进行其他一些工作。我尝试从上传文件的位置复制文件,但它似乎不起作用。这是我到目前为止所拥有的:

if (request instanceof MultipartHttpServletRequest) {

    MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
        CommonsMultipartFile file =  (CommonsMultipartFile)multiRequest.getFile("files");   

            moveFile(file)
   }

   private moveFile(CommonsMultipartFile file){
    def userId = getUserId()
    def userGuid = SecUser.get(userId.id).uid
    def webRootDir = servletContext.getRealPath("/")


    def userDir = new File(webRootDir, "/myUsers/${userGuid}/music")
    userDir.mkdirs()
    file.transferTo( new File( userDir,file.originalFilename))      
    def myFile = new File( "/myUsers/${userGuid}/music/" +     file.originalFilename)


    AudioFile audioFile = AudioFileIO.read(file);

             //AudioFile is expecting a file, not a CommonsMultipartFile 

}

但是,当我这样做时,我收到此错误:

groovy.lang.MissingMethodException:没有方法签名:静态 org.jaudiotagger.audio.AudioFileIO.read() 适用于参数类型:(org.springframework.web.multipart.commons.CommonsMultipartFile) 值:[org.springframework.web .multipart.commons.CommonsMultipartFile@10a531]

谢谢杰森

4

1 回答 1

3

您的代码将 MultiPart 文件复制到 File,但仍将 Multipart 文件用于 AudioFileIO。

它必须像:

private moveFile(CommonsMultipartFile file){
    def userId = getUserId()
    def userGuid = SecUser.get(userId.id).uid
    def webRootDir = servletContext.getRealPath("/")

    def userDir = new File(webRootDir, "/myUsers/${userGuid}/music")
    userDir.mkdirs()
    File myFile = new File( userDir,file.originalFilename)
    file.transferTo(myFile)      

    //
    // !!!!!! you have to pass myFile there
    //
    AudioFile audioFile = AudioFileIO.read(myFile) 
}
于 2011-12-30T07:24:15.527 回答