sevlet实现下载文件功能

简介: 希望做一个小板块,实现文件的上传和下载,那么上传实现了,就需要实现下载,阅读了各位的博客总结了一下。在网页中通过超链接是可以访问我的资源的,浏览器不可访问的资源他就会下载到本地,像一些浏览器可以直接访问的如图片,txt文件浏览器会直接打开。这就需要我们在sevlet中统一处理文件下载。

希望做一个小板块,实现文件的上传和下载,那么上传实现了,就需要实现下载,阅读了各位的博客总结了一下。在网页中通过超链接是可以访问我的资源的,浏览器不可访问的资源他就会下载到本地,像一些浏览器可以直接访问的如图片,txt文件浏览器会直接打开。这就需要我们在sevlet中统一处理文件下载。


在sevlet中,首先要获得jsp或html中的相应,文件名,通过文件名构建路径得到资源,在设置response的一些参数(要下载的)。这样之后使用io读取文件,在读入文件(不设置绝对路径)时候就是自动保存在浏览器默认位置。要下载文件的路径为:


20180526113142108.png



sevlet核心代码:


import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class download extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 String filename= request.getParameter("filename");//获取文件名
    response.setContentType("text/html");
    System.out.println(filename);
    //设置文件MIME类型 
 response.setContentType(getServletContext().getMimeType(filename)); 
 //设置Content-Disposition 
 response.setHeader("Content-Disposition", "attachment;filename=" filename);
 String fullFileName = getServletContext().getRealPath("/image/" filename); //获取绝对路径
 InputStream in = new FileInputStream(fullFileName); 
 OutputStream out = response.getOutputStream(); 
    //PrintWriter out = response.getWriter();
 int b=0;
 while((b=in.read())!=-1)
 {
  out.write(b);
 }
    in.close();
    out.close();
  }
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  this.doGet(request, response);
  }
}


点击去访问


20180526113259352.png


文件下载成功,放置在默认下载路径。


至于大文件可以加缓存下载优化,其他优化的不太清楚。知道的话可以一起讨论。

目录
相关文章
|
10月前
|
前端开发
前端:下载文件(多种方法)
前端:下载文件(多种方法)
785 0
|
前端开发
前端下载文件的几种方式
前端下载文件的几种方式
1081 0
文件下载
文件下载
57 0
下载文件
下载文件
89 0
|
XML 缓存 Java
sevlet3.0上传文件功能
在sevlet3.0以前,java上传文件很麻烦,要么用底层的request.getinputstream。获取流,但是这个流不是干净的流,报过上传的文件名都在文件的前部分,包括文件的结尾也有特殊的字符。需要使用io层层过滤。提取你所需要的文件,鉴于水平有限,我只能提txt文本文件的内容,然而一道图片处理总是丢失或者多出一些东西来。知道原理后也不打算深入研究。
63 0
|
前端开发 JavaScript API
我学会了,写一个前端下载文件功能
过去有很多次文件下载的功能,但是都没有记录下来,这次有空就把文件下载的功能从0写一遍,于是就有了这篇文章。 我会从简到难的方式去实现下载功能。从直接下载字符串到简单请求下载文件,最终通过后端返回的文件名来实现动态下载文件。
603 0
我学会了,写一个前端下载文件功能
|
前端开发 C++
c++用socket,进行文件传输,实现上传与下载文件功能
c++用socket,进行文件传输,实现上传与下载文件功能
|
前端开发
文件下载的几种方式
文件下载的几种方式
|
缓存
上传文件与下载文件不一致的怪事
上传文件与下载文件不一致的怪事
349 0