学习笔记——SpringMVC文件上传与下载

Posted isDaHua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习笔记——SpringMVC文件上传与下载相关的知识,希望对你有一定的参考价值。

2023-01-21

一、文件下载

1、实现文件下载步骤

(1)准备文件下载相关步骤

(2)将ResponseEntity<T>对象,作为方法返回值

(3)为ResponseEntity<T>对象,设置三个参数

 2、示例代码

@RequestMapping("/fileDownloadController")
    public ResponseEntity<byte[]> fileDownload(HttpServletRequest request,String filename)

        ResponseEntity<byte[]> responseEntity = null;

        try 
            //获取文件位置
            //获取文件真实路径【(request|session)->ServletContext】
            String realPath = request.getServletContext().getRealPath("/WEB-INF/download/" + filename);
            //输入流
            InputStream is = new FileInputStream(realPath);
            //文件下载
            byte[] bytes = new byte[is.available()];
            is.read(bytes);
            //设置响应头
            HttpHeaders headers = new HttpHeaders();
            //设置要下载的文件的名字(及文件格式为附件格式,通知服务器下载当前资源,而不是打开)
            headers.add("Content-Disposition","attachment;filename");
            //处理中文文件名问题
            headers.setContentDispositionFormData("attachment",new String(filename));
            //状态码
            responseEntity = new ResponseEntity<>(bytes,headers, HttpStatus.OK);
            is.close();
         catch (Exception e) 
            e.printStackTrace();
        
        return responseEntity;
    

二、文件上传

1、实现文件上传思路

(1)准备工作

①准备文件上传页面

表单的提交方式必须为POST

设置表单enctype属性值为multipart/form-data

表单中包含文件域(type=file)

②导入jar包

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

③装配解析器:CommonsMultipartResolver

<!--    装配CommonsMultipartResolver-->
    <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
<!--        设置字符集-->
        <property name="defaultEncoding" value="utf-8"></property>
<!--        设置总文件的大小-->
        <property name="maxUploadSize" value="102400"></property>
    </bean>

(2)实现步骤

①将type=file(文件域)直接入参:MultipartFile类型即可

②获取文件名称

@Controller
public class FileUploadController 

    @RequestMapping("/fileUploadController")
    public String fileUploadController(String username,
                                       MultipartFile updateFile,
                                       HttpSession session)
        try 
            //获取文件名称
            String filename = updateFile.getOriginalFilename();
            //获取上传路径
            String realPath = session.getServletContext().getRealPath("/WEB-INF/upload");
            //判断上传路径是否存在(如不存在,创建)
            File filePath = new File(realPath);
            if(!filePath.exists())
                filePath.mkdirs();
            
            //实现文件上传
            //File.separator:是系统默认的分隔符
            File uFile = new File(filePath+File.separator+filename);
            updateFile.transferTo(uFile);
         catch (IOException e) 
            e.printStackTrace();
        
        return "success";
    

三、文件上传优化

1、允许同名文件上传

(1)使用UUID解决文件名重复问题

UUID是一个32位16进制随机数(特点:唯一性)

//实现文件上传
            //解决重复文件名上传的方式
            String uuid = UUID.randomUUID().toString().replace("-", "");
            //File.separator:是系统默认的分隔符
            File uFile = new File(filePath+File.separator+uuid+filename);

(2)使用时间戳解决文件名重复问题

System.currentTimeMillis()

2、设置上传文件大小上限

在装配CommonsMultipartResolver时,设置上传文件的上限

<!--    装配CommonsMultipartResolver-->
    <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
<!--        设置字符集-->
        <property name="defaultEncoding" value="utf-8"></property>
<!--        设置总文件的大小-->
        <property name="maxUploadSize" value="102400"></property>
    </bean>

 

以上是关于学习笔记——SpringMVC文件上传与下载的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC框架 学习笔记总结

SpringMVC---文件上传与下载

学习SpringMVC必知必会~springmvc的数据校验表单标签文件上传和下载

SpringMVC文件上传与下载

SpringMVC学习08SpringMVC中实现文件上传

SpringMVC整合fastdfs-client-java实现web文件上传下载