行业资讯 2025年08月6日
0 收藏 0 点赞 184 浏览 2664 个字
摘要 :

文章目录 一、文件上传 二、文件下载 一、文件上传 1.使用SpringMVC上传文件,需要实现MultipartResolver接口,而该接口的实现类SpringMVC已经提供了,为CommonsMultip……




一、文件上传

1.使用SpringMVC上传文件,需要实现MultipartResolver接口,而该接口的实现类SpringMVC已经提供了,为CommonsMultipartResolver
2.具体步骤:
a)导入jar包
文件上传与下载——SpringMVC框架系列教程(11)
b)springmvc.xml配置CommonsMultipartResolver

<!-- 
    配置CommonsMultipartResolver,用于文件上传
    Spring IOC容器在初始化时会自动寻找id为multipartResolver的bean,并将其加入到IOC容器中
 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 配置文件上传默认编码为UTF-8 -->
    <property name="defaultEncoding" value="UTF-8"></property>
    <!-- 配置文件上传最大值,单位字节 ,如果取值-1则表示无限制-->
    <property name="maxUploadSize" value="102400"></property>
</bean>

c)编写controller上传代码
jsp页面:
文件上传与下载——SpringMVC框架系列教程(11)
controller:

@RequestMapping("testUpload")
public String testUpload(MultipartFile file,HttpServletRequest request) throws Exception {
    // 判断文件是否为空,空则返回错误页面
    if (file.isEmpty()) {
        return "error";
    }
    // 获取文件存储路径(绝对路径)
    String path = request.getServletContext().getRealPath("/WEB-INF/upload");
    // 获取原文件名
    String fileName = file.getOriginalFilename();
    // 创建文件实例
    File filePath = new File(path, fileName);
    // 如果文件目录不存在,创建目录
    if (!filePath.getParentFile().exists()) {
        filePath.getParentFile().mkdirs();
        System.out.println("创建目录" + filePath);
    }
    // 写入文件
    file.transferTo(filePath);
    return "success";
}

注意:一般情况文件名是需要修改保证唯一性,则可以使用UUID生成

d)测试
文件上传与下载——SpringMVC框架系列教程(11)
文件上传与下载——SpringMVC框架系列教程(11)

注意:tomcat重启,上传的文件会被清除,原因在于eclipse会重新部署项目,在实际开发中不会存在清除情况。

二、文件下载

方式一:

/*
 * 下载方式一:
 * ①获取前台要下载的文件名称
 * ②设置响应类型
 * ③设置下载页显示的文件名
 * ④获取下载文件夹的绝对路径和文件名合并为File类型
 * ⑤将文件复制到浏览器
 */
@RequestMapping("download")
@ResponseBody
public void download(HttpServletRequest req, HttpServletResponse resp, String filename) throws Exception {
    System.out.println("开始下载文件:"+filename);
    String realPath = req.getServletContext().getRealPath("/WEB-INF/upload");//获取下载文件的路径
    File file = new File(realPath, filename);//把下载文件构成一个文件处理   filename:前台传过来的文件名称

    //设置响应类型  ==》 告诉浏览器当前是下载操作,我要下载东西
    resp.setContentType("application/x-msdownload");
    //设置下载时文件的显示类型(即文件名称-后缀)   URLEncoder防止中文文件名显示乱码
    resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));

    //下载文件:将一个路径下的文件数据转到一个输出流中,也就是把服务器文件通过流写(复制)到浏览器端
    Files.copy(file.toPath(), resp.getOutputStream());//Files.copy(要下载的文件的路径,响应的输出流)
}

方式二:

/*
 * 下载方式二:Spring框架技术
 */
@RequestMapping(value = "download")
public ResponseEntity<byte[]> download(HttpServletRequest request,String filename) throws IOException {
    String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");//获取下载文件的路径
    File file = new File(realPath, filename);//把下载文件构成一个文件处理   filename:前台传过来的文件名称

    HttpHeaders headers = new HttpHeaders();//设置头信息
    String downloadFileName = new String(filename.getBytes("UTF-8"), "iso-8859-1");//设置响应的文件名

    headers.setContentDispositionFormData("attachment", downloadFileName);
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

    // MediaType:互联网媒介类型 contentType:具体请求中的媒体类型信息
    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
}

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/7687.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号