Java技术--SpringBoot文件上传下载(11)

1.创建工程

(1)创建一个springmvc工程需要
   <1>spring-boot-starter-thymeleaf和 spring-boot-starter-web的起步依赖
   	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
	</dependencies>
(2)为例能够上传文件在服务器,需要在web.xml中加入标签做相关的配置
   <1>但在sringboot 工程中,它已经为你自动做了,所以不需要做任何的配置   

2.application.properties文件中相关配置

(1)取消模板文件缓存:spring.thymeleaf.cache=false
(2)单个文件大小:multipart.maxFileSize=50Mb
(3)所以文件的大小:multipart.maxRequestSize=100Mb             

3.创建配置类

1)代码示例如下:
@Configuration
public class MultipartConfig {
	@Bean
    public MultipartConfigElement multipartConfigElement() {
      MultipartConfigFactory factory = new MultipartConfigFactory();
      //单个文件最大
     factory.setMaxFileSize("10240KB"); 
     /// 设置总上传数据总大小
     factory.setMaxRequestSize("102400KB");
     return factory.createMultipartConfig();}}2)springboot在启动的时候,扫描到这个类就会进行相应配置的修改     

4.SpringBoot中CSS、JS、HTML存放在java\main\resources文件夹下
(1)目录结构为:
在这里插入图片描述
5.编写模板文件html

(1)file.html
   <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>
(2)multifile.html
  <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>

6.编写Controller:文件上传

@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) {
            e.printStackTrace();return "false";
        } catch (IOException e) {
            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) {
               e.printStackTrace();return "false";}}}return "true";}}

7.编写Controller:文件下载

@RequestMapping("/download")
    public String downLoad(HttpServletResponse response) throws UnsupportedEncodingException {
        String filename="2.xlsx";
        String filePath = "D:/download" ;
        File file = new File(filePath + "/" + filename);
        if(file.exists()){ //判断文件父目录是否存在
            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
            response.setCharacterEncoding("UTF-8");
           // response.setContentType("application/force-download");
            response.setHeader("Content-Disposition", "attachment;fileName=" +   java.net.URLEncoder.encode(filename,"UTF-8"));
            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) {
                e.printStackTrace();}
            System.out.println("----------file download---" + filename);
            try {bis.close();fis.close();} 
           catch (IOException e) {e.printStackTrace();}}return null;}
发布了191 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq591009234/article/details/105508287