zoukankan      html  css  js  c++  java
  • 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>
    <!--    静态资源映射:将请求路由到对应的目录  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/"/>

    打开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);//状态码
        }

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

  • 相关阅读:
    linux压缩与解压
    simple 单例
    模板字符串
    变量的解构赋值
    let和const关键字
    React的基本认识
    Docker安装Nginx
    jenkins创建工程
    Jenkins系统初始化配置
    在CentOS上使用Docker镜像安装Jenkins
  • 原文地址:https://www.cnblogs.com/xie-qi/p/12984695.html
Copyright © 2011-2022 走看看