springboot文件上传下载,转载的

Spring Boot入门——文件上传与下载

原文来自:https://www.cnblogs.com/studyDetail/articles/7003253.html

1、在pom.xml文件中添加依赖

 

 

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  4.0.0

 

  com.wyl

  SpringBootFile

  0.0.1-SNAPSHOT

  jar

 

  SpringBootFile

  http://maven.apache.org

 

 

    UTF-8

      1.7

 

  

 

      org.springframework.boot

    spring-boot-starter-parent

    1.5.3.RELEASE

 

 

 

   

      junit

      junit

      3.8.1

      test

   

    

   

        org.springframework.boot

        spring-boot-starter-web

   

    

   

   

        org.springframework.boot

        spring-boot-starter-thymeleaf

   

    

   

   

        org.springframework.boot

        spring-boot-devtools

        true

        true

   

    

 

 

2、application.properties文件中取消模板文件缓存

 

spring.thymeleaf.cache=false

3、编写模板文件

 

 

file.html

 

      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">

Insert title here

   

文件上传

   

       

选择文件:

       

   

 

 

multifile.html

      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">

Insert title here

   

文件上传

   

       

选择文件1:

       

选择文件2:

       

选择文件3:

       

   

 

4、编写Controller

 

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.multipart.MultipartFile;

 

@Controller

public class FileUploadController {

 

    /*

     * 获取file.html页面

     */

    @RequestMapping("file")

    public String file(){

        return "/file";

    }

    

    /**

     * 实现文件上传

     * */

    @RequestMapping("fileUpload")

    @ResponseBody 

    public String fileUpload(@RequestParam("fileName") MultipartFile file){

        if(file.isEmpty()){

            return "false";

        }

        String fileName = file.getOriginalFilename();

        int size = (int) file.getSize();

        System.out.println(fileName + "-->" + size);

        

        String path = "F:/test" ;

        File dest = new File(path + "/" + fileName);

        if(!dest.getParentFile().exists()){ //判断文件父目录是否存在

            dest.getParentFile().mkdir();

        }

        try {

            file.transferTo(dest); //保存文件

            return "true";

        } catch (IllegalStateException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

            return "false";

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

            return "false";

        }

    }

 

  /*

     * 获取multifile.html页面

     */

    @RequestMapping("multifile")

    public String multifile(){

        return "/multifile";

    }

    

    /**

     * 实现多文件上传

     * */

    @RequestMapping(value="multifileUpload",method=RequestMethod.POST) 

  /**public @ResponseBody String multifileUpload(@RequestParam("fileName")List files) */

    public @ResponseBody String multifileUpload(HttpServletRequest request){

        

        List files = ((MultipartHttpServletRequest)request).getFiles("fileName");

        

        if(files.isEmpty()){

            return "false";

        }

 

        String path = "F:/test" ;

        

        for(MultipartFile file:files){

            String fileName = file.getOriginalFilename();

            int size = (int) file.getSize();

            System.out.println(fileName + "-->" + size);

            

            if(file.isEmpty()){

                return "false";

            }else{        

                File dest = new File(path + "/" + fileName);

                if(!dest.getParentFile().exists()){ //判断文件父目录是否存在

                    dest.getParentFile().mkdir();

                }

                try {

                    file.transferTo(dest);

                }catch (Exception e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                    return "false";

                } 

            }

        }

        return "true";

    }

}

 

5、测试

 

  

 

  

 

6、多文件上传中遇到的问题

 

org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field fileName exceeds its maximum permitted size of 1048576 bytes.

Spring Boot默认文件上传大小为2M,多文档上传中总是出现文件大小超出限度

 

解决方法:

 

a、在application.properties文件中设置文件大小

 

# Single file max size  

multipart.maxFileSize=50Mb

# All files max size  

multipart.maxRequestSize=50Mb

  但是,事实证明此种方法不能够解决以上问题

 

b、在启动类App.class文件中配置Bean来设置文件大小

 

 

import javax.servlet.MultipartConfigElement;

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.web.servlet.MultipartConfigFactory;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

 

/**

 * Hello world!

 *

 */

@SpringBootApplication

@Configuration

public class App 

{

    public static void main( String[] args )

    {

        System.out.println( "Hello World!" );

        SpringApplication.run(App.class, args);

    }

    

    /**  

     * 文件上传配置  

     * @return  

     */  

    @Bean  

    public MultipartConfigElement multipartConfigElement() {  

        MultipartConfigFactory factory = new MultipartConfigFactory();  

        //单个文件最大  

        factory.setMaxFileSize("10240KB"); //KB,MB  

        /// 设置总上传数据总大小  

        factory.setMaxRequestSize("102400KB");  

        return factory.createMultipartConfig();  

    }  

 

7、文件下载

 

 

@RequestMapping("download")

    public String downLoad(HttpServletResponse response){

        String filename="2.jpg";

        String filePath = "F:/test" ;

        File file = new File(filePath + "/" + filename);

        if(file.exists()){ //判断文件父目录是否存在

            response.setContentType("application/force-download");

            response.setHeader("Content-Disposition", "attachment;fileName=" + filename);

            

            byte[] buffer = new byte[1024];

            FileInputStream fis = null; //文件输入流

            BufferedInputStream bis = null;

            

            OutputStream os = null; //输出流

            try {

                os = response.getOutputStream();

                fis = new FileInputStream(file); 

                bis = new BufferedInputStream(fis);

                int i = bis.read(buffer);

                while(i != -1){

                    os.write(buffer);

                    i = bis.read(buffer);

                }

                

            } catch (Exception e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

            System.out.println("----------file download" + filename);

            try {

                bis.close();

                fis.close();

            } catch (IOException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

        return null;

    }

 

标签: Spring Boot

转载于:https://www.cnblogs.com/xiaohouzai/p/10576009.html

你可能感兴趣的:(java,xhtml)