SpringMVC实现上传下载文件

本文实例为大家分享了SpringMVC实现上传下载文件的具体代码,供大家参考,具体内容如下

一、SpringMVC专门提供了CommonsMultipartResolver组件用于文件上传:

(1)maxUploadSize 文件最大限制,单位是byte
(2)maxInMemorySize 低于这个大小的文件暂存内存中
(3)defaultEncoding 默认编码utf-8

必须在spring-mvc.xml文件

<!-- (2)配置 MultipartResolver 实现文件上传  
                  注意:id="multipartResolver"是固定写法
       -->
       <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
         <!-- 字符编码 -->
        <property name="defaultEncoding" value="utf-8"/>
        <!-- max size 10M -->
        <property name="maxUploadSize" value="10485760000"/>
        <!--内存中最大 4K  -->
        <property name="maxInMemorySize" value="4096"/>
       </bean>

二、SpringMVC文件上传引入jar包 

必须在配置Pom.xml文件

<!-- fileupload start -->
        <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>
 
        <!-- end -->

三、实现【单个文件】上传

(1)JSP页面必须放在WEB-INF下 upload1.jsp 必须添加enctype="multipart/form-data"

<body>
    <div style="margin: 0 auto; margin-top: 100px; background:snow">
        <form method="post" action="upload1.html" name="form1"
            enctype="multipart/form-data">
            <p>
                  照片:<input type="file" name="imagefile">
                <input type="submit" value="上传" name="button1"> <br>
            </p>
        </form>
    </div>

(2) 写控制类 UploadController.java

@Controller
public class UploadController {
 
    @RequestMapping("upload1")
    public String getUpload(@RequestParam("imagefile") MultipartFile imagefile,
            HttpServletRequest request) {
        // 获取上传的服务器路径
        String pathString = request.getSession().getServletContext().getRealPath("/upload/");
        // 获取文件
        String fileName = imagefile.getOriginalFilename();
        
        System.out.println(fileName);
 
        // 判断上传的路径是否存在
        File file = new File(pathString);
        if (!file.exists()) {
            file.mkdirs();
        }
 
        System.out.println("上传路径=" + pathString +"/"+ fileName);
        // 文件不存在
        File targetFile = new File(pathString +"/"+ fileName);
        if (!targetFile.exists()) {
            try {
                targetFile.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
 
        try {
            // 上传
            imagefile.transferTo(targetFile);
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
        //注意:/springmvc5/WEB-INF/jsp/http:/localhost:8888/springmvc5/upload/1.gif.jsp
        //返回文件,必须是重定向文件
        return "redirect:http://localhost:8888/springmvc5/upload/" + fileName;
 
    } }

(3)效果

选择图片路径:

单击上传:

四、实现【多个文件】上传

(1)JSP页面(必须放在WEB-INF下) upload2.jsp  必须添加enctype="multipart/form-data"

<body>
    <div style="margin: 0 auto; margin-top: 100px; background:snow">
        <form method="post" action="upload2.html" name="form1"
            enctype="multipart/form-data">
            <p>
                  照片1:<input type="file" name="imagefile1"><p/>
                  照片2:<input type="file" name="imagefile2"><p/>
                <input type="submit" value="上传" name="button1"> <br>
            </p>
        </form>
    </div>
</body>

(2) 写控制类 UploadController.java

@RequestMapping("upload2")
    public String getUpload2(HttpServletRequest request) {
 
        // 多文件上传
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        // 获得多个文件
        Map<String, MultipartFile> map = multipartRequest.getFileMap();
 
        // 获取上传的服务器路径
        String pathString = request.getSession().getServletContext().getRealPath("/upload/");
        // 判断上传的路径是否存在
        File file1 = new File(pathString);
        if (!file1.exists()) {
            file1.mkdirs();
        }
 
        // 获取文件
        List<String> list = new ArrayList<String>();
 
        // 遍历数据
        for (MultipartFile file : map.values()) {
            String fileName = file.getOriginalFilename();
            System.out.println("上传路径=" + pathString +"/"+ fileName);
            // 文件不存在
            File targetFile = new File(pathString  +"/"+ fileName);
            if (!targetFile.exists()) {
                try {
                    targetFile.createNewFile();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
 
            try {
                // 上传
                file.transferTo(targetFile);
 
                // 保存路径
                list.add("http://localhost:8888/springmvc5/upload/" + fileName);
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
 
        }
        // 保存每个上传的路径
        request.setAttribute("files", list);
        
        return "showUpload";   //跳转到showUpload.jsp页面哦!
 
    }

注意:return "showUpload";是具体显示的页面;必须配置视图解析器在spring-mvc.xml文件中

<!--(1) spring 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"  p:suffix=".jsp"></bean>

(3)JSP页面: showUpload.jsp

<div style="margin: 0 auto; margin-top: 100px; background:snow">
      <%
        List<String> list =(List<String>) request.getAttribute("files");
        
        for(String str:list){
      
       %>
          <a href="<%=str%>" rel="external nofollow" ><img src="<%=str%>" alt=""/></a>
       
       <%} %>
</div>

(4)效果

单击上传:

查看上传到服务器的图片

五、下载图片

(1)JSP页面 login.jsp

<a href="download.html?fileName=08.gif" >下载图片</a><p/>

(2)控制类DownController

@Controller
public class DownController {
 
    @RequestMapping("/download")
    public String download(@RequestParam String fileName,
            HttpServletRequest request, HttpServletResponse response) {
 
        // 设置响应编码
        response.setContentType("text/html;charset=utf-8");
 
        // 设置请求编码
        try {
            request.setCharacterEncoding("utf-8");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
        // 字节流
        BufferedInputStream bis=null;
        BufferedOutputStream bos=null;
 
        // 获取服务器的路径
        String path = request.getSession().getServletContext().getRealPath("/upload/");
 
        // 下载的路径
        String downPath = path +"/"+ fileName;
 
        try {
            // 文件大小
            long fileSize = new File(downPath).length();
            
            //设置内容类型
            response.setContentType("application/x-msdownload");
            //设置头信息
            response.setHeader("Content-disposition", "attachment; filename="+new String(fileName.getBytes("utf-8"),"ISO8859-1"));
            response.setHeader("Content-Length",String.valueOf(fileSize));
            //字节流
            bis = new BufferedInputStream(new FileInputStream(downPath));
            bos= new BufferedOutputStream(response.getOutputStream());
            //字节数组
            byte[] by = new byte[2048];
            
            //
            int length=0;
            
            //读取
            while((length=bis.read(by,0,by.length))!=-1){
                //写入
                bos.write(by, 0, length);
                
            }
            
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally{
            //关闭连接
             if(bis!=null){
                 try {
                    bis.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
             }
             if(bos!=null){
                 try {
                     bos.close();
                 } catch (IOException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
                 }
             }
        }
 
        return null;
 
    }
}

(3)效果

保存或打开如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • SpringMVC下实现Excel文件上传下载

    在实际应用中,经常会遇到上传Excel或者下载Excel的情况,比如导入数据.下载统计数据等等场景.针对这个问题,我写了个基于SpringMVC的简单上传下载示例,其中Excel的处理使用Apache的POI组件. 主要依赖的包如下: <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</versi

  • SpringMVC+Ajax实现文件批量上传和下载功能实例代码

    今天做了文件的上传下载,小小总结一下,基本的web项目建立及SpringMVC框架搭建此处不详细写出来了. 上传form: <form id="uploadfiles" enctype="multipart/form-data"> <input type="file" multiple="multiple" id="file_upload" name="file_upload&q

  • SpringMVC实现文件上传和下载功能

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 文件上传 第一步,加入jar包: commons-fileupload-1.3.1.jar commons-io-2.4.jar 第二步,在SpringMVC配置文件中配置CommonsMultipartResovler <bean id="multipartResolver" class="org.springframework.web.multipart.commons.Commo

  • SpringMVC框架实现图片上传与下载

    本文实例为大家分享了SpringMVC框架实现图片上传与下载的具体代码,供大家参考,具体内容如下 1.新建一个Maven webapp项目,引入需要用的夹包,pom.xml文件的依赖包如下: <dependencies> <!-- 用于生成图片的缩略图 --> <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId>

  • SpringMVC实现文件上传和下载的工具类

    本文主要目的是记录自己基于SpringMVC实现的文件上传和下载的工具类的编写,代码经过测试可以直接运行在以后的项目中. 开发的主要思路是对上传和下载文件进行抽象,把上传和下载的核心功能抽取出来分装成类. 我的工具类具体代码如下: package com.baosight.utils; import java.io.BufferedInputStream; import java.io.File; import java.io.FileNotFoundException; import java

  • 在SpringMVC框架下实现文件的上传和下载示例

    在eclipse中的javaEE环境下:导入必要的架包 web.xml的配置文件: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation=&

  • springMVC配置环境实现文件上传和下载

    最近的项目中用到了文件的上传和下载功能,我觉着这个功能比较重要,因此特意把它提取出来自己进行了尝试. 下面就是springMVC配置环境实现文件上传和下载的具体步骤,供大家参考,具体内容如下 一. 基础配置: maven导包及配置pom.xml,导包时除开springmvc的基础依赖外,需要导入文件上传下载时用到的commons-io.jsr和commons-fileupload.jar: <project xmlns="http://maven.apache.org/POM/4.0.0&

  • MyBatis与SpringMVC相结合实现文件上传、下载功能

    环境:maven+SpringMVC + Spring + MyBatis + MySql 本文主要说明如何使用input上传文件到服务器指定目录,或保存到数据库中:如何从数据库下载文件,和显示图像文件并实现缩放. 将文件存储在数据库中,一般是存文件的byte数组,对应的数据库数据类型为blob. 首先要创建数据库,此处使用MySql数据库. 注意:文中给出的代码多为节选重要片段,并不齐全. 1. 前期准备 使用maven创建一个springMVC+spring+mybatis+mysql的项目

  • SpringMVC实现文件的上传和下载实例代码

    前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:"用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流".我回复他说:"使用SpringMVC框架可以做到这一点,因为SpringMVC为文件的上传提供了直接的支持,但需要依赖Apache提供Commons FileUpload组件jar包."鉴于这个问题,我上网也百度了一下,网上很多都是介绍的使用IO流来实现文件的上传和下载,也有说到框架的,但介绍的并不是很完整,今天小钱将和大家介绍使用Spr

  • SpringMvc3+extjs4实现上传与下载功能

    最近生活过的很充实,人一直在不停的忙碌着学习新东西.这是我最近遇到的问题,我找度娘n了很久,终于找到了解决方案! 前台代码: <script> Ext.onReady(function() { Ext.create('Ext.form.Panel', { title : '文件上传', width : 400, bodyPadding : 10, frame : true, renderTo : document.body, items : [ { xtype : 'filefield', n

随机推荐