springboot文件上傳下載,轉載的

Spring Boot入門——文件上傳與下載html

原文來自:https://www.cnblogs.com/studyDetail/articles/7003253.htmljava

一、在pom.xml文件中添加依賴web

 

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"spring

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

  <modelVersion>4.0.0</modelVersion>緩存

 

  <groupId>com.wyl</groupId>tomcat

  <artifactId>SpringBootFile</artifactId>app

  <version>0.0.1-SNAPSHOT</version>maven

  <packaging>jar</packaging>spring-boot

 

  <name>SpringBootFile</name>

  <url>http://maven.apache.org</url>

 

  <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

      <java.version>1.7</java.version>

  </properties>

  

  <parent>

      <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>

    <version>1.5.3.RELEASE</version>

  </parent>

 

  <dependencies>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>3.8.1</version>

      <scope>test</scope>

    </dependency>

    

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

    

    <!-- thymeleaf模板插件 -->

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-thymeleaf</artifactId>

    </dependency>

    

    <!-- devtools插件,熱部署 -->

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-devtools</artifactId>

        <optional>true</optional>

        <scope>true</scope>

    </dependency>

    

  </dependencies>

</project>

 

二、application.properties文件中取消模板文件緩存

 

spring.thymeleaf.cache=false

三、編寫模板文件

 

 

file.html

 

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"  

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

<head>

<meta charset="UTF-8" />

<title>Insert title here</title>

</head>

<body>

    <h1 th:inlines="text">文件上傳</h1>

    <form action="fileUpload" method="post" enctype="multipart/form-data">

        <p>選擇文件: <input type="file" name="fileName"/></p>

        <p><input type="submit" value="提交"/></p>

    </form>

</body>

</html>

 

 

multifile.html

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"  

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

<head>

<meta charset="UTF-8" />

<title>Insert title here</title>

</head>

<body>

    <h1 th:inlines="text">文件上傳</h1>

    <form action="multifileUpload" method="post" enctype="multipart/form-data" >

        <p>選擇文件1: <input type="file" name="fileName"/></p>

        <p>選擇文件2: <input type="file" name="fileName"/></p>

        <p>選擇文件3: <input type="file" name="fileName"/></p>

        <p><input type="submit" value="提交"/></p>

    </form>

</body>

</html>

 

四、編寫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<MultipartFile> files) */

    public @ResponseBody String multifileUpload(HttpServletRequest request){

        

        List<MultipartFile> 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";

    }

}

 

五、測試

 

  

 

  

 

六、多文件上傳中遇到的問題

 

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();  

    }  

 

七、文件下載

 

 

@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

相關文章
相關標籤/搜索