springmvc 之 文件上传 下载

本文介绍了一个简单的文件上传和下载功能的实现方法。通过使用commons-fileupload等依赖,结合Spring MVC框架,实现了文件上传及下载的功能,并提供了具体的代码示例。

1.首先需要几个jar包 上传下载的

    <!-- 上传组件包 -->  
        <dependency>  
            <groupId>commons-fileupload</groupId>  
            <artifactId>commons-fileupload</artifactId>  
            <version>1.3.1</version>  
        </dependency>  
        <dependency>  
            <groupId>commons-io</groupId>  
            <artifactId>commons-io</artifactId>  
            <version>2.4</version>  
        </dependency>  
        <dependency>  
            <groupId>commons-codec</groupId>  
            <artifactId>commons-codec</artifactId>  
            <version>1.9</version>  
        </dependency>

2.controller层

//上传文件
 //上传文件会自动绑定到MultipartFile中
         @RequestMapping(value="/upload",method=RequestMethod.POST)
         public String upload(HttpServletRequest request,
                @RequestParam("description") String description,
                @RequestParam("file") MultipartFile file) throws Exception {

            System.out.println(description);
            //如果文件不为空,写入上传路径
            if(!file.isEmpty()) {

          //上传文件路径(别人的方式)
          //  String path = request.getServletContext().getRealPath("/images/");
                //上传文件路径
                String path = "E:\\eclipse-workspace\\shymaven\\src\\main\\webapp\\images\\";

                System.out.println(path);

                SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
              String st=     df.format(new Date());

                //上传文件名


                String filename = st+file.getOriginalFilename();
                File filepath = new File(path,filename);
                //判断路径是否存在,如果不存在就创建一个
                if (!filepath.getParentFile().exists()) { 
                    filepath.getParentFile().mkdirs();
                }
                //将上传文件保存到一个目标文件当中
                file.transferTo(new File(path + File.separator + filename));

                request.setAttribute("filename", filename);//将文件名保持到request里
                return "upload/download";
            } else {
                return "upload/error";
            }


         }

文件下载

 @RequestMapping(value="/download1")
         public ResponseEntity<byte[]> download1(HttpServletRequest request,
                 @RequestParam("filename") String filename,
                 Model model)throws Exception {
            //下载文件路径
                String path = "E:\\eclipse-workspace\\shymaven\\src\\main\\webapp\\images\\";
            File file = new File(path + File.separator + filename);
            HttpHeaders headers = new HttpHeaders();  
            //下载显示的文件名,解决中文名称乱码问题  
            String downloadFielName = new String(filename.getBytes("UTF-8"),"iso-8859-1");
            //通知浏览器以attachment(下载方式)打开图片
            headers.setContentDispositionFormData("attachment", downloadFielName); 
            //application/octet-stream : 二进制流数据(最常见的文件下载)。
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),    
                    headers, HttpStatus.CREATED);  
         }

3页面 上传页面 UploadForm.html 我没放在web-info 下

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传</title>
</head>
<body>
    <h2>文件上传</h2>
    <form action="../sh/upload" enctype="multipart/form-data" method="post">
        <table>
            <tr>
                <td>文件描述:</td>
                <td><input type="text" name="description"></td>
            </tr>
            <tr>
                <td>请选择文件:</td>
                <td><input type="file" name="file"></td>
            </tr>
            <tr>
                <td><input type="submit" value="上传"></td>
            </tr>
        </table>
    </form>
</body>
</html>

下载页面 download.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件下载</title>
</head>
<body>
<h3>文件下载</h3>
<a href="../sh/download1?filename=${requestScope.filename}">
  ${requestScope.filename}
</a>
</body>
</html>

参考地址 https://blog.youkuaiyun.com/qian_ch/article/details/69258465

还有一个对象的~~~使用对象接收上传文件

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值