SpringMVC上传下载文件(四)

1.SpringMVC的文件上传

1) 创建项目,完善结构,导入依赖,配置web.xml

导入依赖包文件

<!-- 配置开发SpringMVC所以来的jar包 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.1.5.RELEASE</version>
</dependency>
<!-- 配置ServletAPI依赖 -->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.0.1</version>
  <scope>provided</scope>
</dependency>
<!-- commons-fileupload组件 -->
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.3.1</version>
</dependency>

配置springmvc配置文件

<?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:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 开启注解springmvc -->
    <mvc:annotation-driven></mvc:annotation-driven>
    <!-- 配置自动扫描包 -->
    <context:component-scan base-package="com.demo.controller"></context:component-scan>
</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>
  <!-- 配置控制管理器 -->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <!-- 加载springmvc配置文件 -->
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

Java上传图片的代码 

@Controller
public class UploadFileTest {
    private static int count = 0;
    @RequestMapping("/uploads")
    public ModelAndView getInFile(HttpServletRequest request){
        ModelAndView mav = new ModelAndView();
        //1.将当前类中的ServletContext对象转换成CommonsMultipartResolver
        ServletContext servletContext = request.getSession().getServletContext();
        CommonsMultipartResolver cmrs = new CommonsMultipartResolver(servletContext);

        // 2. 检查HttpServletRequest是否是一个文件上传的请求。
        if (cmrs.isMultipart(request)){
            // 3. 将HttpServletRequest转换成文件上传请求。
            MultipartHttpServletRequest  multipartreq = (MultipartHttpServletRequest) request;
            // 4.从文件上传请求中得到文件名称。
            Iterator<String> names = multipartreq.getFileNames();
            while (names.hasNext()){
                //得到input中的name值
                String nameatter = names.next().toString();
                //根据name属性得到上传上来的文件对象。
                MultipartFile multipartFile = multipartreq.getFile(nameatter);
                String newfilename=""; // 保存上来的文件名称。
                if (multipartFile != null){
                    //得到被上传上来的文件真实姓名。
                    String isname =multipartFile.getOriginalFilename();
                    //得到文件的后缀名
                    String lastname = isname.substring(isname.lastIndexOf('.'));
                    newfilename = "文件" + ++count + lastname;
                    //得到项目的根目录
                    String realPath = servletContext.getRealPath("/upload");
                    //创建保存文件目录
                    File uploadpicdir = new File(realPath);
                    if (!uploadpicdir.exists()){
                        //创建目录
                        uploadpicdir.mkdirs();
                    }
                    newfilename = "one.jpg";
                    // 组织一个保存的文件对象【文件保存目录 + 文件名称】
                    String pathfile = uploadpicdir.getAbsolutePath()+File.separator+newfilename;
                    System.out.println(pathfile);
                    File savefile = new File(pathfile);
                    try {
                        multipartFile.transferTo(savefile);
                    }catch(Exception e){
                        e.printStackTrace();
                    }

                }

                //得到上传成功以后的文件的http访问路径
                String reqURL = request.getRequestURL().toString();
                reqURL = reqURL.substring(0,reqURL.lastIndexOf('/'));
                reqURL =reqURL + "/upload/"+newfilename;

                // http://127.0.0.1:8080/upload/xxxx.png
                System.out.println("reqURL==" + reqURL);
            }
            mav.setViewName("successd.html");
        }
        return  mav;
    }
}

java下载图片的代码

import org.apache.commons.io.FileUtils;
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.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;

@Controller
public class DownLoadTest {
    @RequestMapping(value = "/getfile",method = RequestMethod.GET)
    public ResponseEntity<byte[]> getFile(HttpServletRequest request) throws IOException {
        // 得到请求中的文件名称
        String filename = request.getParameter("myfile");
        // 获取绝对路径
        String realPath = request.getSession().getServletContext().getRealPath("/upload");
        // 创建保存文件额目录的文件对象
        File uploaddir = new File(realPath);
        //创建被下载的文件对象
        File file = new File(uploaddir,filename);
        System.out.println(file.getAbsolutePath());
        //设置http协议头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentDispositionFormData("attachment",filename);
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
    }
}

无奈源于不够强大

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《ASP.NET MVC 5 框架揭秘》以一个模拟ASP.NET MVC内部运行机制的“迷你版MVC框架”作为开篇,其目的在于将ASP.NET MVC真实架构的“全景”勾勒出来。接下来本书以请求消息在ASP.NET MVC框架内部的流向为主线将相关的知识点串连起来,力求将”黑盒式”的消息处理管道清晰透明地展示在读者面前。相信精读本书的读者一定能够将ASP.NET MVC从接收请求到响应回复的整个流程了然于胸,对包括路由、Controller的激活、Model元数据的解析、Action方法的选择与执行、参数的绑定与验证、过滤器的执行以及View的呈现等相关的机制具有深刻的理解。 本书以实例演示的方式介绍了很多与ASP.NET MVC相关的很好实践,同时还提供了一系列实用性的扩展,相信它们一定能够解决你在真实开发过程中遇到的很多问题。本书末章提供的案例不仅仅用于演示实践中的ASP.NET MVC,很多的架构设计方面的东西也包含其中。除此之外,本书在很多章节还从设计的角度对ASP.NET MVC的架构进行了深入分析,所以从某种意义上讲本书可以当成一本架构设计的书来读。 ASP.NET MVC 5 框架揭秘 目录 第1章 ASP.NET + MVC 第2章 路由 第3章 Controller的激活 第4章 Model元数据的解析 第5章 3个描述对象 第6章 Model的绑定(上篇) 第7章 Model的绑定(下篇) 第8章 Model的验证(上篇) 第9章 Model的验证(下篇) 第10章 Action方法的执行 第11章 View的呈现 第12章 过滤器 第13章 特性路由 第14章 案例实践

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值