gpt4 book ai didi

Spring boot实现文件上传实例(多文件上传)

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Spring boot实现文件上传实例(多文件上传)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

文件上传主要分以下几个步骤:

(1)新建maven java project; 。

(2)在pom.xml加入相应依赖; 。

(3)新建一个表单页面(这里使用thymleaf),

(4)编写controller,

(5)测试; 。

(6)对上传的文件做一些限制; 。

(7)多文件上传实现 。

(1)新建maven Java project 。

新建一个名称为spring-boot-fileupload maven Java项目; 。

(2)在pom.xml加入相应依赖; 。

加入相应的maven依赖,具体看以下解释:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
< project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
  < modelVersion >4.0.0</ modelVersion >
  < groupId >com.example</ groupId >
  < artifactId >spring-boot-fileupload</ artifactId >
  < version >0.0.1-SNAPSHOT</ version >
  
  <!--
     spring boot 父节点依赖,
         引入这个之后相关的引入就不需要添加version配置,
     spring boot会自动选择最合适的版本进行添加。
    -->
   < parent >
     < groupId >org.springframework.boot</ groupId >
     < artifactId >spring-boot-starter-parent</ artifactId >
     < version >1.4.0.RELEASE</ version >
   </ parent >
 
  < dependencies >
     <!-- spring boot web支持:mvc,aop... -->
     < dependency >
       < groupId >org.springframework.boot</ groupId >
       < artifactId >spring-boot-starter-web</ artifactId >
     </ dependency >
 
     <!-- thmleaf模板依赖. -->
     < dependency >
      < groupId >org.springframework.boot</ groupId >
      < artifactId >spring-boot-starter-thymeleaf</ artifactId >
     </ dependency >
  </ dependencies >
 
   < build >
     < plugins >
       <!-- 编译版本; -->
       < plugin >
        < artifactId >maven-compiler-plugin</ artifactId >
        < configuration >
          < source >1.7</ source >
          < target >1.7</ target >
        </ configuration >
       </ plugin >
     </ plugins >
   </ build >
</ project >

(3)新建一个表单页面(这里使用thymleaf) 。

在src/main/resouces新建templates,在templates下新建一个file.html

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!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 >
< title >Hello World!</ title >
</ head >
< body >
   < form method = "POST" enctype = "multipart/form-data" action = "/upload" >
     < p >
       文件:< input type = "file" name = "file" />
     </ p >
     < p >
       < input type = "submit" value = "上传" />
     </ p >
   </ form >
</ body >
</ html >

(4)编写controller,

编写controller进行测试,这里主要实现两个方法:其一就是提供访问的/file路径;其二就是提供post上传的/upload方法,具体看代码实现:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
@Controller
public class FileUploadController {
   // 访问路径为:http://127.0.0.1:8080/file
   @RequestMapping ( "/file" )
   public String file() {
     return "/file" ;
   }
 
   /**
    * 文件上传具体实现方法;
   
    * @param file
    * @return
    */
   @RequestMapping ( "/upload" )
   @ResponseBody
   public String handleFileUpload( @RequestParam ( "file" ) MultipartFile file) {
     if (!file.isEmpty()) {
       try {
         /*
          * 这段代码执行完毕之后,图片上传到了工程的跟路径; 大家自己扩散下思维,如果我们想把图片上传到
          * d:/files大家是否能实现呢? 等等;
          * 这里只是简单一个例子,请自行参考,融入到实际中可能需要大家自己做一些思考,比如: 1、文件路径; 2、文件名;
          * 3、文件格式; 4、文件大小的限制;
          */
 
         BufferedOutputStream out = new BufferedOutputStream(
             new FileOutputStream( new File(
                 file.getOriginalFilename())));
         out.write(file.getBytes());
         out.flush();
         out.close();
 
       } catch (FileNotFoundException e) {
         e.printStackTrace();
         return "上传失败," + e.getMessage();
       } catch (IOException e) {
         e.printStackTrace();
         return "上传失败," + e.getMessage();
       }
 
       return "上传成功" ;
 
     } else {
       return "上传失败,因为文件是空的." ;
     }
   }
   
   // 访问路径为:http://127.0.0.1:8080/file
     @RequestMapping ( "/mutifile" )
     public String mutifile() {
       return "/mutifile" ;
     }

(5)编写Application.java然后测试 。

Application没什么代码,就是Spring Boot的启动配置,具体如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.example.controller;
 
import javax.servlet.MultipartConfigElement;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//import org.springframework.boot.context.embedded.MultipartConfigFactory;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
 
@SpringBootApplication
public class Application {
   public static void main(String[] args) {
      SpringApplication.run(Application. class , args);
   }
   
}

然后你就可以访问:http://127.0.0.1:8080/file 进行测试了,文件上传的路径是在工程的跟路径下,请刷新查看,其它的请查看代码中的注释进行自行思考 。

(6)对上传的文件做一些限制; 。

对文件做一些限制是有必要的,在Application.java进行编码配置:。  。

?
1
2
3
4
5
6
7
8
9
10
11
@Bean
   public MultipartConfigElement multipartConfigElement() { 
       MultipartConfigFactory factory = new MultipartConfigFactory();
       //// 设置文件大小限制 ,超了,页面会抛出异常信息,这时候就需要进行异常信息的处理了;
       factory.setMaxFileSize( "128KB" ); //KB,MB
       /// 设置总上传数据总大小
       factory.setMaxRequestSize( "256KB" ); 
       //Sets the directory location where files will be stored.
       //factory.setLocation("路径地址");
       return factory.createMultipartConfig(); 
   }

(7)多文件上传实现 。

多文件对于前段页面比较简单,具体代码实现:

在src/resouces/templates/mutifile.html 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!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 >
     < title >Hello World!</ title >
   </ head >
   < body >
     < form method = "POST" enctype = "multipart/form-data" action = "/batch/upload"
       < p >文件1:< input type = "file" name = "file" /></ p >
       < p >文件2:< input type = "file" name = "file" /></ p >
       < p >文件3:< input type = "file" name = "file" /></ p >
       < p >< input type = "submit" value = "上传" /></ p >
     </ form >
   </ body >
</ html >

FileUploadController中新增两个方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// 访问路径为:http://127.0.0.1:8080/mutifile
     @RequestMapping ( "/mutifile" )
     public String mutifile() {
       return "/mutifile" ;
     }
 
   /**
    * 多文件具体上传时间,主要是使用了MultipartHttpServletRequest和MultipartFile
   
    * @param request
    * @return
    */
 
   @RequestMapping (value = "/batch/upload" , method = RequestMethod.POST)
   @ResponseBody
   public String handleFileUpload(HttpServletRequest request) {
     List<MultipartFile> files = ((MultipartHttpServletRequest) request)
         .getFiles( "file" );
     MultipartFile file = null ;
     BufferedOutputStream stream = null ;
     for ( int i = 0 ; i < files.size(); ++i) {
       file = files.get(i);
       if (!file.isEmpty()) {
         try {
           byte [] bytes = file.getBytes();
           stream = new BufferedOutputStream( new FileOutputStream(
               new File(file.getOriginalFilename())));
           stream.write(bytes);
           stream.close();
 
         } catch (Exception e) {
           stream = null ;
           return "You failed to upload " + i + " => "
               + e.getMessage();
 
         }
       } else {
         return "You failed to upload " + i
             + " because the file was empty." ;
       }
 
     }
     return "upload successful" ;
 
   }

访问路径:http://127.0.0.1:8080/mutifile 进行测试.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:http://blog.csdn.net/u014695188/article/details/52398239 。

最后此篇关于Spring boot实现文件上传实例(多文件上传)的文章就讲到这里了,如果你想了解更多关于Spring boot实现文件上传实例(多文件上传)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com