springMVC实现文件上传和下载

作者:奕铭呀 时间:2023-04-17 16:39:07 

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

1准备工作

web.xml文件导入DispatcherServlet,CharacterEncodingFilter


<servlet>
       <servlet-name>springmvc</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>classpath:applicationContext.xml</param-value>
       </init-param>
       <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
       <servlet-name>springmvc</servlet-name>
       <url-pattern>/</url-pattern>
   </servlet-mapping>

<filter>
       <filter-name>encoding</filter-name>
       <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
       <init-param>
           <param-name>encoding</param-name>
           <param-value>utf-8</param-value>
       </init-param>
   </filter>
   <filter-mapping>
       <filter-name>encoding</filter-name>
       <url-pattern>/*</url-pattern>
</filter-mapping>

前端测试页面


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
 <head>
   <title>$Title$</title>
 </head>
 <body>
 <%--  必须将表单的method设置为POST--%>
 <%--  设置enctype属性为multipart/form-data,二进制传递数据--%>
 <form action="${pageContext.request.contextPath}/upload2" enctype="multipart/form-data" method="post">
   <input type="file" name="file"/>
   <input type="submit" value="upload">
 </form>
 <br/>
 <a href="${pageContext.request.contextPath}/download" rel="external nofollow" >点击下载</a>
 </body>
</html>

spring配置文件applicationContext.xml


<?xml version="1.0" encoding="UTF8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:mvc="http://www.springframework.org/schema/mvc"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context
      https://www.springframework.org/schema/context/spring-context.xsd
      http://www.springframework.org/schema/mvc
      https://www.springframework.org/schema/mvc/spring-mvc.xsd">

<!-- 自动扫描指定的包,下面所有注解类交给IOC容器管理,根据自己的项目扫描包 -->
   <context:component-scan base-package="com.zky.controller"/>
   <!-- 注解驱动 -->
   <mvc:annotation-driven>
       <mvc:message-converters register-defaults="true">
           <bean class="org.springframework.http.converter.StringHttpMessageConverter">
               <constructor-arg value="UTF-8"/>
           </bean>
           <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
               <property name="objectMapper">
                   <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                       <property name="failOnEmptyBeans" value="false"/>
                   </bean>
               </property>
           </bean>
       </mvc:message-converters>
   </mvc:annotation-driven>
   <!-- 静态资源过滤-->
   <mvc:default-servlet-handler/>
   <!-- 视图解析器 -->
   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
         id="internalResourceViewResolver">
       <!-- 前缀 -->
       <property name="prefix" value="/WEB-INF/jsp/" />
       <!-- 后缀 -->
       <property name="suffix" value=".jsp" />
   </bean>

<!--文件上传配置-->
   <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>
</beans>

2.文件上传

controller


package com.zky.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;

@Controller
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 来保存上传的文件


/*
    * 采用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";
   }

3.文件下载 


@RequestMapping(value="/download")
   public String downloads(HttpServletResponse response , HttpServletRequest request) throws Exception{
       //要下载的图片地址,改为自己图片路径,我是下载在我的项目里面的
       String  path = request.getServletContext().getRealPath("/upload");
       //文件名
       String  fileName = "新建文本文档.txt";

//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;
   }

来源:https://blog.csdn.net/qq_53578500/article/details/119484932

标签:springMVC,上传,下载
0
投稿

猜你喜欢

  • 使用@pathvariable与@requestparam碰到的一些问题及解决

    2023-11-27 16:30:34
  • C# 无边框窗体之窗体移动实现代码

    2021-07-22 04:36:48
  • 简单实现Android学生管理系统(附源码)

    2022-06-12 05:59:04
  • Android自定义AvatarImageView实现头像显示效果

    2022-09-28 21:26:10
  • C#多线程的Join()方法

    2022-05-08 23:56:13
  • Java超详细透彻讲解static

    2021-10-13 12:18:34
  • 教你怎么在IDEA中创建java多模块项目

    2023-05-28 19:25:58
  • C#编程中设置程序只可被运行一次的方法

    2022-08-09 08:36:32
  • SpringBoot MongoDB 索引冲突分析及解决方法

    2023-01-23 06:28:05
  • Android实现滑动屏幕切换图片

    2022-04-26 23:14:42
  • 在C#中global关键字的作用及其用法

    2021-12-24 04:33:19
  • 浅谈java中OO的概念和设计原则(必看)

    2023-11-24 13:09:56
  • 关于dubbo的RPC和RESTful性能及对比

    2023-05-23 02:55:14
  • 三种Java自定义DNS解析器方法与实践

    2022-01-13 10:12:11
  • C# 使用Fiddler捕获本地HttpClient发出的请求操作

    2022-06-28 04:10:34
  • Android实现带指示点的自动轮播无限循环效果

    2021-12-09 19:22:44
  • eclipse导入appcompat项目报错解决办法

    2021-11-10 14:25:57
  • Mybatis-plus配置分页插件返回统一结果集

    2022-05-27 19:15:06
  • IntelliJ IDEA 安装教程2019.09.23(最新版)

    2023-08-24 23:01:44
  • java调用外部程序的方法及代码演示

    2023-11-13 22:42:55
  • asp之家 软件编程 m.aspxhome.com