zoukankan      html  css  js  c++  java
  • 分享知识-快乐自己:SpringMvc中的单多文件上传及文件下载

    摘要:SpringMvc中的单多文件上传及文件下载:(以下是核心代码(拿过去直接能用)不谢)

    <!--设置文件上传需要的jar-->
    <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>1.3.1</version>
    </dependency>

    ControllerWelcome 控制器类:

    package controller;
    import bean.User;
    import org.apache.commons.io.FileUtils;
    import org.apache.commons.lang3.RandomUtils;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.MediaType;
    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Controller;
    import org.springframework.validation.BindingResult;
    import org.springframework.validation.annotation.Validated;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartFile;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpSession;
    import java.io.File;
    import java.io.IOException;
    import java.lang.reflect.Field;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    /**
     * @author asus
     */
    @Controller
    @RequestMapping("/user")
    public class ControllerWelcome {
    
      //单文件上传(User对象的属性名与表单中的name名一致方可自动映射到值)
        @RequestMapping("/upload")
        public ModelAndView upload(User user, MultipartFile picPath, HttpSession session) {
            ModelAndView modelAndView = new ModelAndView("Welcome");
            //获取服务器路径
            String realPath = session.getServletContext().getRealPath("/upload/");
            //判断是否存在,不存在则创建
            File file = new File(realPath);
            if (!file.exists()) {
                file.mkdir();
            }
            //获取源文件名称
            String originalFilename = picPath.getOriginalFilename();
            String fileName = System.currentTimeMillis() + RandomUtils.nextInt(0, 1000000) + originalFilename;
            File file1 = new File(realPath, fileName);
            try {
                picPath.transferTo(file1);
                System.out.println("用户名为:" + user.getUseName());
                System.out.println("上传成功:" + realPath);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return modelAndView;
        }
      //多文件上传(User对象中的属性名与表单的name名一致方可自动映射到值)
        @RequestMapping("/uploads")
        public ModelAndView uploads(User user, @RequestParam MultipartFile[] picPath, HttpSession session) {
            ModelAndView modelAndView = new ModelAndView("Welcome");
            //获取服务器路径
            String realPath = session.getServletContext().getRealPath("/upload/");
            //判断是否存在,不存在则创建
            File file = new File(realPath);
            if (!file.exists()) {
                file.mkdir();
            }
            for (MultipartFile temp : picPath) {
                //获取源文件名称
                String originalFilename = temp.getOriginalFilename();
                String fileName = System.currentTimeMillis() + RandomUtils.nextInt(0, 1000000) + originalFilename;
                File file1 = new File(realPath, fileName);
                try {
                    temp.transferTo(file1);
                    System.out.println("用户名为:" + user.getUseName());
                    System.out.println("上传成功:" + realPath);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return modelAndView;
        }
    
        //文件下载
        @RequestMapping(value = "/download", method = RequestMethod.GET) //匹配的是href中的download请求
        public ResponseEntity<byte[]> download(@RequestParam("filename") String filename
        ) throws IOException {
            //从我们的上传文件夹中去取
            String downloadFilePath = "E:\idealCase\CourseNotes\SpringMvcCase\SpringMvcCode06\target\SpringMvcCode06\upload";
            //新建一个文件
            File file = new File(downloadFilePath + File.separator + filename);
            //http头信息
            HttpHeaders headers = new HttpHeaders();
            //设置编码
            String downloadFileName = new String(filename.getBytes("UTF-8"), "iso-8859-1");
    
            headers.setContentDispositionFormData("attachment", downloadFileName);
    
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    
            //MediaType:互联网媒介类型  contentType:具体请求中的媒体类型信息
    
            return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),
                    headers, HttpStatus.CREATED);
    
        }
    }

    核心配置文件:Spring-view.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           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
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <!--指定Controller扫描器-->
        <context:component-scan base-package="controller"/>
        <!--配置试图解析器-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
    
        <!--配置文件上传解析器-->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="defaultEncoding" value="UTF-8"/>
            <!--单个文件大小-->
            <property name="maxUploadSizePerFile" value="100000"/>
            <!--文件总大小-->
            <property name="maxUploadSize" value="100000"/>
        </bean>
    
    </beans>

    web.xml 配置文件:

    <!DOCTYPE web-app PUBLIC
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd" >
    
    <web-app>
      <display-name>Archetype Created Web Application</display-name>
      <!--设置乱码-->
      <filter>
        <filter-name>encodingFilter</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>
        <init-param>
          <param-name>forceEncoding</param-name>
          <param-value>true</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
      <!--设置核心控制器-->
      <servlet>
        <servlet-name>mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath*:Spring-*.xml</param-value>
        </init-param>
        <!--优先加载-->
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>mvc</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    </web-app>

    index.jsp 前端页面:

    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <html>
    <body>
    <h2>Hello World!</h2>
    <fieldset>
        <legend>单文件上传:</legend>
        <form action="/user/upload" method="post" enctype="multipart/form-data">
            用户名:<input type="text" name="useName"><br/>
            文件一:<input type="file" name="picPath">
            <input type="submit" value="提交">
        </form>
    </fieldset>
    <br/><br/>
    <fieldset>
        <legend>多文件上传:</legend>
        <form action="/user/uploads" method="post" enctype="multipart/form-data">
            用户名:<input type="text" name="useName"><br/>
            文件一:<input type="file" name="picPath">
            文件一:<input type="file" name="picPath">
            <input type="submit" value="提交">
        </form>
    </fieldset>
    <br/><br/>
    <fieldset>
        <legend>文件下载</legend>
        <a href="/user/download?filename=1537854894247新建文本文档.txt">
            文件下载:1537854894247新建文本文档.txt</a>
    </fieldset>
    </body>
    </html>
  • 相关阅读:
    js"发送验证码"倒计时效果!
    input:button按钮文字换行
    最新jQuery引用google地址外部文件(jquery 1.2.6至jquery1.7.2)
    overflow:hidden ie6,7失效
    ZeroClipboard支持IE,firefox,Chrome复制到剪贴板(转)
    js取url参数
    弹出层高度不限垂直居中 兼容ie ff chrome
    jQuery 2.0将不再支持IE 6/7/8
    CSS: IE中的BUG之marginbottom失效
    inputSuggest邮箱提示自动补全js插件
  • 原文地址:https://www.cnblogs.com/mlq2017/p/9699199.html
Copyright © 2011-2022 走看看