SpringMVC文件上传和下载

SpringMVC文件上传和下载

基于表单的文件上传
标签 <input type="file"/>会在浏览器中显示一个输入框和一个按钮,输入框可供用户填写本地文件的文件名和路径名,按钮可以让浏览器打开一个文件选择框供用户选择文件。
文件上传的表单例子如下:

<form method="post" action="upload" enctype="multipart/form-data">
<input type="file" name="myfile"/>
</form>

对于form三个参数介绍:

  1. action 信息送的目的地(后台数据接受与处理模块:一般处理程序)
  2. post 隐式发送 get显示发送
  3. enctype="multiparta/form-data 只要表单有文件上传就这样固定写 流的形式

部分需要注意的代码:
1.转格式 还原成8859格式

String newName= new String(fileName.getBytes("UTF-8"),"iso-8859-1");

2 转流

 HttpHeaders hh=new HttpHeaders();
//        头部上下文表单里的数据 参数一固定值 参数二转流后新名字
        hh.setContentDispositionFormData("attachment",newName);
        return  new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),hh,HttpStatus.CREATED);

注意:参数一为固定值 参数二为转流后新名字

3 获得上传文件名

 String name=file[i].getOriginalFilename();

4修改文件名

String newName=new Date().getTime()+new Random().nextInt(9999999)+name;
File file1=new File(realPath+newName);

注意:获取毫秒级数据+随机数+name 得到唯一名 防止重名发生

代码实例:
1.UploadController

package cn.zjw.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.Random;

@Controller
public class UploadController{
    @RequestMapping("/upload.do")
    public String upload(MultipartFile file[],HttpServletRequest request) throws IOException {
        for (int i = 0; i<file.length; i++) {
//            上传路径
            String realPath=request.getServletContext().getRealPath("/upload/");//上传文件都在upload里
//            获得上传文件名
            String name=file[i].getOriginalFilename();
//            修改文件名
            String newName=new Date().getTime()+new Random().nextInt(9999999)+name;
            File file1=new File(realPath+newName);
//            上传
            file[i].transferTo(file1);

        }
    return "success";
    }

}

2.upload.jsp

<html>
<head>
    <title>上传文件</title>
</head>
<body>

     <%--action 信息送的目的地(后台数据接受与处理模块:一般处理程序)--%>
         <%--post 隐式发送 get显示发送--%>
     <%--enctype="multiparta/form-data 只要表单有文件上传就这样固定写    流的形式--%>
<form action="upload.do" method="post" enctype="multipart/form-data">
    上传文件<input type="file" name="file"><br>
    上传文件<input type="file" name="file"><br>
    上传文件<input type="file" name="file"><br>
    <input type="submit" value="提交">
</form>


</body>
</html>

3DownloadController

package cn.zjw.controller;

import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;


@Controller
public class DownloadController {
    @RequestMapping("/download.do")
    public ResponseEntity<byte[]> download(@RequestParam("fileName") String fileName,HttpServletRequest request) throws IOException {
//      获得下载路径
          String realpath = request.getServletContext().getRealPath("/download/");
          File file=new File(realpath+fileName);
//          转格式 还原成8859格式

       String newName= new String(fileName.getBytes("UTF-8"),"iso-8859-1");
//       转流
        HttpHeaders hh=new HttpHeaders();
//        头部上下文表单里的数据 参数一固定值 参数二转流后新名字
        hh.setContentDispositionFormData("attachment",newName);
        return  new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),hh,HttpStatus.CREATED);



    }


}

4 download.jsp

<html>
<head>
    <title>Title</title>
</head>
<body>
<%--<a href="download/2.jpg">下载文档</a>--%>



<a href="download.do?fileName=2.jpg">下载文档pic</a>

</body>
</html>

运行结果: 成功上传下载2.jpg图片

上传结果图:
在这里插入图片描述
在这里插入图片描述
下载结果图:
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值