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

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

  • 相关阅读:
    转载:SQL语句执行顺序
    [Oracle/sql]查看当前用户名下有多少表 以及查看表字段信息
    [oracle/Sql]怎样比较两表的差异?
    从两表连接看Oracle sql优化器的效果
    使用Hint /*+ full(emp)*/ 将索引全扫描改成全表扫描,看cost差别
    全扫描与快速全索引扫描的比较实验
    Hint usenl usage /*+ leading(emp,dept) usenl(emp) */
    毛驴儿拉磨啊。 它走不出那个圈。 井里蛤蟆就能看见巴掌大的一块天呦!
    大数据技术之_03_Hadoop学习_02_入门_Hadoop运行模式+【本地运行模式+伪分布式运行模式+完全分布式运行模式(开发重点)】+Hadoop编译源码(面试重点)+常见错误及解决方案
    大数据技术之_03_Hadoop学习_01_入门_大数据概论+从Hadoop框架讨论大数据生态+Hadoop运行环境搭建(开发重点)
  • 原文地址:https://www.cnblogs.com/xie-qi/p/12984695.html
Copyright © 2011-2022 走看看