看狂神老师的web以及springmvc学习了文件上传,今天打算在springboot上实现,却遇到了以下问题:
Failed to convert value of type 'org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile' to required type 'org.springframework.web.multipart.commons.CommonsMultipartFile'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile' to required type 'org.springframework.web.multipart.commons.CommonsMultipartFile'
在我的理解就是StandardMultipartFile不能转为CommonsMultipartFile,因为在mvc中使用的就是
@RequestParam("file") CommonsMultipartFile file,以为在springboot中也有用,测试结果不能,要使用
@RequestParam("file") MultipartFile file
我还在配置文件中添加了配置
#enabled默认为true,既允许附件上传。 spring.servlet.multipart.enabled=true #配置上传文件的大小 #max-file-size指定了单个文件的最大长度 max-request-size属性说明单次HTTP请求上传的最大长度 spring.servlet.multipart.max-file-size=1000MB spring.servlet.multipart.max-request-size=2000MB
文件上传成功了。
完整代码如下:
<div class="panel-body"> <form action="/upload" enctype="multipart/form-data" method="post"> <p><input type="file" name="file"></p> <input type="submit" value="上传"> </form> </div>
@Controller public class FileUtil { @RequestMapping("/upload") public String upload(@RequestParam("file") MultipartFile file, HttpServletRequest request , Model model) throws IOException { String msg=""; //获取文件的名字 String uploadFileName = file.getOriginalFilename(); //判断 if (uploadFileName.equals("")){ return "redirect:/toIndex"; } System.out.println("上传文件的名字: "+uploadFileName); //保存位置 String path="E://shop//upload"; //String path = request.getServletContext().getRealPath("/upload"); //如果不存在就创建一个 File realPath=new File(path); if (!realPath.exists()){ realPath.mkdir(); } System.out.println("上传文件的保存地址: "+realPath); //文件传输 InputStream is=file.getInputStream(); OutputStream os=new FileOutputStream(new File(realPath,uploadFileName)); int len; byte[] buff=new byte[1024]; while ((len=is.read(buff))!=-1){ os.write(buff,0,len); os.flush(); } is.close(); os.close(); return "redirect:/blankPage"; } }