SpringMVC如何实现图片等文件的上传与下载

Java技术 潘老师 4年前 (2020-07-26) 1727 ℃ (0) 扫码查看

在java项目开发中,我们经常会用到图片等文件的上传与下载功能,比如用户上传头像、下载excel统计表格等等,那么基于SpringMVC框架的项目,该如何实现类似的上传与下载呢?下面潘老师带大家来看一下。
SpringMVC如何实现图片等文件的上传与下载

1、使用SpringMVC上传文件需要依赖另外两个jar包,分别为commons-fileupload包和commons-io包,在这里我们使用commons-fileupload-1.4.jarcommons-io-2.6.jar,可自行网上下载,然后直接复制到java项目的lib目录下。

2、需要实现MultipartResolver接口,而该接口的实现类SpringMVC已经提供了,为CommonsMultipartResolver,因此在springmvc.xml(找到你的SpringMVC核心配置文件)添加如下配置:

<!-- 
配置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>

3、在WebContent中新建upload.jsp页面用于上传测试,代码如下:

注意:form表单必须要添加enctype="multipart/form-data"
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传测试页面</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/testUpload" method="post" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <input type="submit" value="提交"/>
</form>
</body>
</html>

4、在controller中新增testUpload方法,具体代码如下:

注意:一般情况文件名是需要修改保证唯一性,则可以使用UUID生成
@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";
}

5、部署运行项目,访问upload.jsp页面选择文件上传,然后提交
SpringMVC如何实现图片等文件的上传与下载
6、打开在tomcat所在中对应的upload目录,查看测试文件是否上传成功

注意:tomcat重启,上传的文件会被清除,而在eclipse上修改文件保存会导致会重新部署项目重启tomcat,你会发现上传的图片突然没了,如果想解决这个问题,潘老师后期将会补充。

SpringMVC如何实现图片等文件的上传与下载

1、新建download.jsp页面,代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>下载文件</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/download?filename=测试上传.txt">点击下载测试上传.txt文件</a>
</body>
</html>

2、在controller中新增download方法,具体代码如下:

@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");
        //把下载文件构成一个文件处理   filename:前台传过来的文件名称
    File file = new File(realPath, filename);

    //设置响应类型 ,目的是告诉浏览器当前是下载操作
    resp.setContentType("application/x-msdownload");
    //设置下载时文件的显示类型(即文件名称-后缀)   URLEncoder防止中文文件名出现乱码
    resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
    //下载文件:将一个路径下的文件数据转到一个输出流中,也就是把服务器文件通过流写(复制)到浏览器端
       //Files.copy(要下载的文件的路径,响应的输出流)
    Files.copy(file.toPath(), resp.getOutputStream());
}

3、访问download.jsp页面,点击下载即可,到这里应该是可以正常下载了。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/465.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】