springmvc中的文件的上传和下载

一、文件上传;

1) 前台表达提交文件;

upload.jsp页面:
<body> <%--文件上传必须指定为post方式提交表单 enctype:指定为ultipart/form-data --%> <form action="${pageContext.request.contextPath}/fileUpload" method="post" enctype="multipart/form-data"> 选择上传的文件:<input type="file" name="headPic"/><br/> <input type="submit" value="上传"/> </form> </body>

2) 后台写控制层方法接收并保存文件;

@Controller
public class FileController {
    /**
     * MultipartFile:用来接收前台传递的文件对象
     * **/
    @RequestMapping("/fileUpload")
    public String upload(MultipartFile headPic) throws IOException {
        //获取到上传的文件名
        String filename=headPic.getOriginalFilename();
        System.out.println("文件名:"+filename);//a.jpg
        //设定保存的路径
        String savePath="E:/upload/";
        //创建文件对象
        File file=new File(savePath+filename);
        if (!file.getParentFile().exists()){
            file.getParentFile().mkdirs();//如果父目录不存在创建目录
        }
        //将上传的文件保存到指定的文件对象中
        headPic.transferTo(file);
        return "download.jsp";
    }

3) 在springmvc配置文件中配置上传的一些参数;

<!--    配置文件上传-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--        设置文件编码格式-->
        <property name="defaultEncoding" value="UTF-8"></property>
<!--        设置最大上传大小,单位为字节,1kb=1024byte,1M=1024kb-->
        <property name="maxUploadSize" value="10485760"></property>
    </bean>

打开tomcat服务器测试之后,就可以在我们的E盘upload目录下查看是否有我们上传的图片了,如果存在,则说明上传成功,反之,则失败;

二、文件下载;

1)先写一个前台表达式的下载页面,即上一个文件上传后会跳转的下载页面;

download.jsp页面:
<body> 上传成功,文件下载 <a href="${pageContext.request.contextPath}/fileDownload?fileName=1.jpg">下载</a> </body>

2)后台写控制层方法并下载文件;

 @RequestMapping("/fileDownload")
    public ResponseEntity<byte[]> download(String fileName) throws IOException {
        //设定保存的路径
        String savePath="E:/upload/";
        File file=new File(savePath+fileName);
        if (!file.exists()){//如果文件不存在
            return null;
        }
        //构建响应头
        HttpHeaders headers=new HttpHeaders();
        //设置以附件形式打开,设定附件文件名
        headers.setContentDispositionFormData("attachment",fileName);
        List<MediaType> accept=headers.getAccept();
        for (MediaType mediaType:accept) {
            //设置ContentType为Stream
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        }
        byte[] bytes= FileUtils.readFileToByteArray(file);
        return new ResponseEntity<byte[]>(
                bytes,//文字的字节数组
                headers,
                HttpStatus.CREATED);
    }

3)在springmvc配置文件中配置下载的一些参数;

<!--    静态资源映射:将请求路由到对应的目录  mapping:指定请求路径;  location:指定目录;  file:磁盘路径
        /upload/a.jpg==>返回E:/upload/a.jpg
-->
    <mvc:resources mapping="/upload/**" location="file:E:/upload/"/>
<!--    映射项目内部资源
        /staticFile/js/jquery-3.2.1.mini.js==>/WEB-INF/static/js/jquery-3.2.1.mini.js
-->
    <mvc:resources mapping="/staticFile/**" location="/WEB-INF/static/"/>

结果:不同的浏览器设置不同,有些会提示出一个下载位置的窗口,有些点击下载后直接下载,反正只要是下载,即说明测试成功了;

猜你喜欢

转载自www.cnblogs.com/xie-qi/p/12984695.html