《Spring MVC》 第九章 文件上传、下载

系列文章目录

第一章 MVC模式
第二章 让程序run起来
第三章 @Controller、@RequestMapping 注解和获取请求参数
第四章 域对象、视图、转发和重定向
第五章 第五章 实现RESTful
第六章 MVC类型转换器、格式化器
第七章 JSON数据交互
第八章 拦截器实现权限验证、异常处理
第九章 文件上传、下载
第十章 使用logback+Slf4j打印日志
第十一章 单体架构任务调度



在这里插入图片描述


前言

使用commons-fileupload , commons-io 工具,实现上传、下载功能

1、环境搭建

1.1、导入依赖包

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

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

1.2、配置文件

<!--配置文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--设置上传文件的默认编码格式-->
    <property name="defaultEncoding" value="UTF-8"></property>
    <!--设置允许上传的最大长度-->
    <property name="maxUploadSize" value="1024000"></property>
</bean>
<!--静态资源文件路径-->
<mvc:resources mapping="/uploadfile/**" location="/uploadfile/"/>
属性说明
defaultEncoding上传文件的默认编码格式。
maxUploadSize上传文件的最大长度(单位为字节)。
maxInMemorySize读取文件到内存中的最大字节数。
resolveLazily判断是否要延迟解析文件。

2、上传功能实现

2.1、html页面

<form th:action="@{/uploadfile}" method="post" enctype="multipart/form-data">
    <input type="file" name="file" multiple="multiple"/>
    <input type="submit" value="上传"/>
</form>

2.2、controller

@PostMapping("/uploadfile")
public String uploadfile(MultipartFile file,HttpServletRequest request){
    if(!file.isEmpty()){
        //原始文件名
        String originalFilename = file.getOriginalFilename();
        //文件扩展名
        String fileType = originalFilename.substring(originalFilename.lastIndexOf("."));
        //获取上传文件的路径
        String realPath = request.getServletContext().getRealPath("/uploadfile/");
        //创建上传文件的路径
        File f = new File(realPath);
        //判断文件夹是否存在
        if(!f.exists()){
            f.mkdir();
        }
        //上传后的文件名
        String newFileName = UUID.randomUUID() + fileType;
        //文件名传回前端
        request.setAttribute("imgPath",request.getRequestURL()+"/" + newFileName);
        try {
            //持久化文件
            file.transferTo(new File(realPath+newFileName));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return "success";
}

3、下载功能实现

@RequestMapping("/downloadFile")
public ResponseEntity<byte[]> downloadFile(HttpServletRequest request,String fileName) throws IOException {
    fileName = fileName.substring(fileName.lastIndexOf("/") + 1);
    //得到图片的实际路径
    String realFile =  request.getServletContext().getRealPath("/uploadfile/") + fileName;
    File file = new File(realFile);
    byte[] bytes = FileUtils.readFileToByteArray(file);
    //创建 HttpHeaders 对象设置响应头信息
    HttpHeaders headers = new HttpHeaders();
    //设置下载的方式和文件名称
    headers.setContentDispositionFormData("attachment",fileName);
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
}
<a th:href="@{/downloadFile(fileName=${imgPath})}">下载</a>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青花锁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值