zoukankan      html  css  js  c++  java
  • springboot文件上传问题记录

    最近做项目需要开发一个通过excel表格导入数据的功能,上传接口写好调试的时候遇到几个问题,记录一下。

    报错1:

    15:50:57.586 [http-nio-8763-exec-8          ] [] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet]      - Servlet.service() for servlet [dispatcherServlet] in context with path [/poc] threw exception [Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException] with root cause 
    java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileUploadException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.getDeclaredMethods(Class.java:1975)
    原因: jar包缺失。
    解决办法:新增
    commons-fileupload依赖即可。
    <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.2.1</version>
    </dependency>

    报错2:
    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': no matching editors or conversion strategy found [com.eversec.centertool.exception.GlobalControllerExceptionHandler.handleException(GlobalControllerExceptionHandler.java:37)]
    org.springframework.web.method.annotation.MethodArgumentConversionNotSupportedException: 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': no matching editors or conversion strategy found
        at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:124)
        at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
        at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:158)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:128)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    @RequestMapping("/uploadfile")
    public String uploadfile(@RequestParam("file") CommonsMultipartFile file) throws IOException{
    //用来检测程序运行时间
    long startTime=System.currentTimeMillis();
    System.out.println("fileName:"+file.getOriginalFilename());

    try {
    //获取输出流
    OutputStream os=new FileOutputStream("/Users/tn-ma-l00000333/downloads/poc/导出会员数据/"+new Date().getTime()+file.getOriginalFilename());
    //获取输入流 CommonsMultipartFile 中可以直接得到文件的流
    InputStream is=file.getInputStream();
    int temp;
    //一个一个字节的读取并写入
    while((temp=is.read())!=(-1))
    {
    os.write(temp);
    }
    os.flush();
    os.close();
    is.close();

    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    long endTime=System.currentTimeMillis();
    System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms");
    return "/success";
    }
    原因:类型转换错误。
    解决方案:yml配置文件新增multipart.enabled:true,替换@RequestParam("file") CommonsMultipartFile file为@RequestParam("file") MultipartFile file。即可成功接收文件输入流。

    报错3:本来以为万事大吉,结果上传较大文件的时候,新问题来了。
    20:10:55.669 [http-nio-8763-exec-4          ] [] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet]      - Servlet.service() for servlet [dispatcherServlet] in context with path [/poc] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.] with root cause 
    org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.
    at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl$FileItemStreamImpl$1.raiseError(FileUploadBase.java:630)
    原因:文件大小超出springboot上传文件限制。
    解决方案:yml新增文件大小限制参数。
    spring:
    servlet:
    multipart:
    max-file-size: 100MB
    max-request-size: 1GB
    参考:https://blog.csdn.net/guocunlei25/article/details/90232243
  • 相关阅读:
    P1031 均分纸牌
    P1130 红牌
    P1094 纪念品分组
    win32 公用对话框
    高性能完成端口socket服务(IOCP)
    一个简单的调试日志功能
    UI设计工具
    windows平台(不包括ARM的CE)通用的压缩和解压缩
    win api 实现 AES加密、解密,获取HASH
    win32sdk 编程整理的些资料
  • 原文地址:https://www.cnblogs.com/vtyluoluo/p/14215085.html
Copyright © 2011-2022 走看看