一聚教程网:一个值得你收藏的教程网站

热门教程

SpringMVC实现文件上传与下载代码示例

时间:2022-06-29 02:26:50 编辑:袖梨 来源:一聚教程网

本篇文章小编给大家分享一下SpringMVC实现文件上传与下载代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。

0.环境准备

1.maven依赖


    
      org.junit.jupiter
      junit-jupiter-api
      5.7.0
      test
    


    
    
      javax.servlet
      javax.servlet-api
      3.1.0
      provided
    

    
    
      org.springframework
      spring-webmvc
      5.2.6.RELEASE
    

    
    
      commons-io
      commons-io
      2.8.0
    
    
      commons-fileupload
      commons-fileupload
      1.3.3

2.springConfig。xml配置文件



    
    

    
    
        
        
        
        jsp" />
    

    
    


    

         

         

 
        

    

3.web.xml配置



  
  
    web
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:springConfig.xml
    
    1
  
  
    web
    *.mvc
  

  
  
    characterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      utf-8
    
    
      forRequestEncoding
      true
    
    
      forResponseEncoding
      true
    

  
  
    characterEncodingFilter
    /*
  

1.文件上传

文件上传分为三种方式:

单个文件单字段

多个文件单字段

多个文件多字段

注意点:

1、提交方式为表单的post请求

2、from属性中必须有enctype=“multipart/form-data”

3、如果是单字段多文件:输入框中的属性必须为:multiple=“multiple”

4、表单中的属性name必须和后端参数一致

1.前端代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    文件上传



文件上传(单个文件单字段上传)

文件上传(多文件单字段上传)

文件上传(多文件多字段上传)

2.后端代码

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;

/**
 * @author compass
 * @version 1.0
 * @date 2021-05-11 14:33
 */
@Controller
public class UploadIFileController {

    // 处理单个文件上传
    @PostMapping("/uploadFile1.mvc")
     public ModelAndView uploadFile1(MultipartFile file, HttpSession session) throws IOException {

        ModelAndView view = new ModelAndView();
        // 得到文件名称
        String filename=file.getOriginalFilename();
        System.out.println("文件名称:"+filename);
        if (!file.isEmpty()){
            // 判断文件的后缀
            if (filename.endsWith(".jpg")||filename.endsWith(".png")||filename.endsWith(".txt"));
            //设置文件的保存路径
            String savePath="C:Users14823IdeaProjectsspringMVCfileuploadsrcmainwebappWEB-INFfile";
            File srcFile = new File(savePath,filename);
            // 执行文件保存操作
            file.transferTo(srcFile);
            view.setViewName("forward:/uploadSuccess.jsp");
        }else {
            view.setViewName("forward:/uploadFailed.jsp");
        }
        return view;
    }

    // 处理多文件上传
    @PostMapping("/uploadFile2.mvc")
    public ModelAndView uploadFile2(MultipartFile[] file,HttpSession session) throws IOException {

        ModelAndView view = new ModelAndView();
        //设置文件的保存路径
        String savePath="C:Users14823IdeaProjectsspringMVCfileuploadsrcmainwebappWEB-INFfile";
        String[] filenames = new String[file.length];
        // 只要上传过来的文件为空或者是不符合指定类型的都会上传失败
        for (int i = 0; i 

2.文件下载

文件下分为两种情况:

文件名称是纯英文字母的

文件名带有中文不处理会乱码的

1.前端代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    文件下载


文件下载(非中文名称)

文件下载(中文名称)

2.后端代码

/**
 * @author compass
 * @version 1.0
 * @date 2021-05-11 15:23
 */
@Controller
public class DownloadController {

    // 非中文名称文件下载
    @GetMapping("/download1.mvc")
    public ResponseEntity  fileDownload1(String filename,HttpServletRequest request) throws IOException {

        String path="C:Users14823IdeaProjectsspringMVCfileuploadsrcmainwebappWEB-INFfile";
        File file = new File(path,filename);
        HttpHeaders header = new HttpHeaders();
        header.setContentDispositionFormData("attachment",filename);
        header.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        ResponseEntity result = new ResponseEntity<>(FileUtils.readFileToByteArray(file), header, HttpStatus.OK);
        return result;
    }

    // 中文名称文件下载
    @GetMapping("/download2.mvc")
    public ResponseEntity  fileDownload2(String filename,HttpServletRequest request) throws IOException {

        System.out.println(filename);
        String path="C:Users14823IdeaProjectsspringMVCfileuploadsrcmainwebappWEB-INFfile";
        filename = filename.replace("_", "%");
        filename= URLDecoder.decode(filename,"UTF-8");
        String downloadFile="";
        if (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie")>0){
            filename= URLEncoder.encode(filename,"UTF-8");
            downloadFile=filename.replaceAll("+","%20");
        }else {
            downloadFile=new String(filename.getBytes("UTF-8"),"ISO-8859-1");
        }
        File file = new File(path,filename);
        HttpHeaders header = new HttpHeaders();
        header.setContentDispositionFormData("attachment",downloadFile);
        header.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        ResponseEntity result = new ResponseEntity<>(FileUtils.readFileToByteArray(file), header, HttpStatus.OK);
        return result;
    }

}

热门栏目