Spring MVC实现文件上传和下载

 更新时间:2021年04月12日 14:26:50   作者:Zhou_LC  
这篇文章主要为大家详细介绍了Spring MVC实现文件上传和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

文件上传

1、导入主要依赖

<!--文件上传-->
<dependency>
 <groupId>commons-fileupload</groupId>
 <artifactId>commons-fileupload</artifactId>
 <version>1.3.3</version>
</dependency>
<!--servlet-api导入高版本的-->
<dependency>
 <groupId>javax.servlet</groupId>
 <artifactId>javax.servlet-api</artifactId>
 <version>4.0.1</version>
</dependency>

2、配置bean:multipartResolver(注:此bena的id必须为:multipartResolver , 否则上传文件会报400的错误!)

<!--文件上传配置-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
 <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,
 默认为ISO-8859-1 -->
 <property name="defaultEncoding" value="utf-8"/>
 <!-- 上传文件大小上限,单位为字节(10485760=10M) -->
 <property name="maxUploadSize" value="10485760"/>
 <property name="maxInMemorySize" value="40960"/>
</bean>

3、index.jsp

4、Controller

@RestController
public class FileController {
    //@RequestParam("file") 将name=file控件得到的文件封装成 CommonsMultipartFile 对象

    //批量上传 CommonsMultipartFile 则为数组即可
    @RequestMapping("/upload")
    public String fileUpload(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request) throws IOException {
        //获取文件名 : file.getOriginalFilename();
        String uploadFileName = file.getOriginalFilename();
        //如果文件名为空,直接回到首页!
        if ("".equals(uploadFileName)) {
            return "redirect:/index.jsp";
        }
        System.out.println("上传文件名 : " + uploadFileName);
        //上传路径保存设置
        String path = request.getServletContext().getRealPath("/upload");
        //如果路径不存在,创建一个
        File realPath = new File(path);
        if (!realPath.exists()) {
            realPath.mkdir();
        }
        System.out.println("上传文件保存地址:" + realPath);
        InputStream is = file.getInputStream(); //文件输入流
        OutputStream os = new FileOutputStream(new File(realPath, uploadFileName)); //文件输出流
        //读取写出
        int len = 0;
        byte[] buffer = new byte[1024];
        while ((len = is.read(buffer)) != -1) {
            os.write(buffer, 0, len);
            os.flush();
        }
        os.close();
        is.close();
        return "redirect:/index.jsp";
    }

    /*
     * 采用file.Transto 来保存上传的文件
     */
    @RequestMapping("/upload2")
    public String fileUpload2(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request) throws IOException {
        //上传路径保存设置
        String path = request.getServletContext().getRealPath("/upload");
        File realPath = new File(path);
        if (!realPath.exists()) {
            realPath.mkdir();
        }
        System.out.println("上传文件保存地址:" + realPath);
        //通过CommonsMultipartFile的方法直接写文件(注意这个时候)
        file.transferTo(new File(realPath + "/" + file.getOriginalFilename()));
        return "redirect:/index.jsp";
    }
}

文件下载

index.jsp

Controller

@RequestMapping(value = "/download")
public String downloads(HttpServletResponse response, HttpServletRequest request) throws Exception {
    //要下载的图片地址
    String path = request.getServletContext().getRealPath("/upload");
    String fileName = "基础语法.jpg";

    //1、设置response 响应头
    response.reset(); //设置页面不缓存,清空buffer
    response.setCharacterEncoding("UTF-8"); //字符编码
    response.setContentType("multipart/form-data"); //二进制传输数据
    //设置响应头
    response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));
    File file = new File(path, fileName);
    //2、 读取文件--输入流
    InputStream input = new FileInputStream(file);
    //3、 写出文件--输出流
    OutputStream out = response.getOutputStream();
    byte[] buff = new byte[1024];
    int index = 0;
    //4、执行 写出操作
    while ((index = input.read(buff)) != -1) {
        out.write(buff, 0, index);
        out.flush();
    }
    out.close();
    input.close();
    return null;
}

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

相关文章

  • Spring中的自定义NamespaceHandler详解

    Spring中的自定义NamespaceHandler详解

    这篇文章主要介绍了Spring中的自定义NamespaceHandler详解,通常情况下,Spring生态圈提供的功能已足够使用,但不排除特殊情况下,需要匹配特殊及复杂的业务情况,Spring提供了可扩展Schema支持,可以自定义命名空间进行配置及解析,需要的朋友可以参考下
    2023-11-11
  • java基本教程之线程休眠 java多线程教程

    java基本教程之线程休眠 java多线程教程

    本文对javaThread中sleep()方法进行介绍,sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”,大家参考使用吧
    2014-01-01
  • Java 堆排序实例(大顶堆、小顶堆)

    Java 堆排序实例(大顶堆、小顶堆)

    下面小编就为大家分享一篇Java 堆排序实例(大顶堆、小顶堆),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • idea导入工程时不能导入maven项目不能加入tomcatServer的原因

    idea导入工程时不能导入maven项目不能加入tomcatServer的原因

    这篇文章主要介绍了idea导入工程时不能导入maven项目不能加入tomcatServer的原因及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • java中tomcat的80端口被占用问题解决

    java中tomcat的80端口被占用问题解决

    java中tomcat的80端口被占用问题解决,需要的朋友可以参考一下
    2013-03-03
  • Mybatis-Plus处理Mysql Json类型字段的详细教程

    Mybatis-Plus处理Mysql Json类型字段的详细教程

    这篇文章主要给大家介绍了关于Mybatis-Plus处理Mysql Json类型字段的详细教程,Mybatis-Plus可以很方便地处理JSON字段,在实体类中可以使用@JSONField注解来标记JSON字段,同时在mapper.xml中使用json函数来操作JSON字段,需要的朋友可以参考下
    2024-01-01
  • SpringBoot项目中org.junit.jupiter.api.Test报错问题及解决

    SpringBoot项目中org.junit.jupiter.api.Test报错问题及解决

    这篇文章主要介绍了SpringBoot项目中org.junit.jupiter.api.Test报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Java LinkedList实现班级信息管理系统

    Java LinkedList实现班级信息管理系统

    这篇文章主要为大家详细介绍了Java LinkedList实现班级信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Java中的Unsafe工具类使用详解

    Java中的Unsafe工具类使用详解

    这篇文章主要介绍了Java中的Unsafe工具类使用详解,Unsafe是jdk提供的一个直接访问操作系统资源的工具类(底层c++实现),它可以直接分配内存,内存复制,copy,提供cpu级别的CAS乐观锁等操作,需要的朋友可以参考下
    2023-12-12
  • Eclipse中使用Maven创建Java Web工程的实现方式

    Eclipse中使用Maven创建Java Web工程的实现方式

    这篇文章主要介绍了Eclipse中使用Maven创建Java Web工程的实现方式的相关资料,希望通过本文能帮助到大家,让大家实现这样的方式,需要的朋友可以参考下
    2017-10-10

最新评论