文件下载

pom.xml的maven:

 <dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-webmvc</artifactId>    <version>4.1.9.RELEASE</version>   </dependency>

  <dependency>    <groupId>org.apache.commons</groupId>    <artifactId>commons-io</artifactId>    <version>1.3.2</version>   </dependency>

  <dependency>    <groupId>commons-fileupload</groupId>    <artifactId>commons-fileupload</artifactId>    <version>1.3.2</version>   </dependency>

web.xml配置:

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


  <!-- 配置DispatcherServlet的初始化參數:设置文件的路径和文件名称 -->
  <init-param>
 
  <param-name>contextConfigLocation</param-name>
 
  <!-- classPath是字节码文件的根目录,这个目录 与java文件目录相对应, 这个目录只需要在java代码的根目录创建xml文件,编译之后再classes文件夹下会出现对应的xml文件, 这个根目录分两种情况 -->
  <param-value>classPath:springmvc.xml</param-value>
 
  </init-param>
 
  <!--优先级,服务器启动便加载servlet  -->
  <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springDispatcherServlet</servlet-name>
    <!-- /不包括jsp -->
  <url-pattern>/</url-pattern>
  </servlet-mapping>

springmvc.xml配置:

<!-- 设置扫描组件的包: --> <context:component-scan base-package="com.qianfeng"/>

<!-- 配置映射解析器:如何将控制器返回的结果字符串,转换为一个物理的视图文件-->  <bean id="internalResourceViewResolver"   class="org.springframework.web.servlet.view.InternalResourceViewResolver">     <!-- 前缀 ,指定jsp资源存放的位置 --> <property name="prefix"  value="/WEB-INF/views/"/>

<!-- 后缀,所有jsp文件的结尾 --> <property name="suffix" value=".jsp"/> </bean>

<!--声明当前的项目要用到文件上传的功能  --> <!-- id的值必须是 --> <!-- 配置文件上传解析器multipartResolver --> <bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 设置编码,要与前端页面同意,一般情况下都是utf-8 --> <property name="defaultEncoding" value="UTF-8"></property> <property name="maxUploadSize" value="10240000"></property> <!-- 上传最大限制 --> </bean>

<!-- 以上标签表示文件上传功能开始启动 -->

java代码:

@RequestMapping("download")
 public void load(HttpServletResponse resp,
   HttpServletRequest req){
  //核心思想,把服务器上的文件转成流输出到客户端
  //需要response对象
  //需要向客户端输出流的对象
  
  
  //通过io操作获取服务器的文件
  String path=req.getServletContext().getRealPath("/load/5.bmp");
  File file=new File(path);
  
    //设置contentype,告诉浏览器返回的数据格式(是文件还是图片) aplication/octet-stream是通用类型
  resp.setContentType("aplication/octet-stream");
  System.out.println(file.getName());
  
  //响应也有请求体,请求头,请求行
  //content-Disposition 表示向客户端描述附加信息
  //attachment表示以附件的形式进行下载
  resp.addHeader("content-Disposition","attachment;fileName="+file.getName());
  
  try {
   ServletOutputStream outputStream=resp.getOutputStream();
   InputStream inputStream=new FileInputStream(file);

//转成byte数组
   byte[] b=IOUtils.toByteArray(inputStream);
   
   //以byte数组的形式进行输出
   outputStream.write(b);
   
   //流操作完须关闭
   inputStream.close();
   outputStream.flush();
   outputStream.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 
  
 
 

原文地址:https://www.cnblogs.com/rzqz/p/7073420.html