广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Java技术 > 正文

惠州JavaWeb​如何实现文件下载?_北大青鸟IT学校

作者:邓华发布时间:2021-06-11分类:Java技术浏览:978


导读:大家知道JavaWeb​如何实现文件下载吗?下面惠州北大青鸟老师给大家科普一下JavaWeb​如何实现文件下载,希望对大家学习Java有帮助。

大家知道JavaWeb如何实现文件下载吗?下面惠州北大青鸟老师给大家科普一下JavaWeb如何实现文件下载,希望对大家学习Java有帮助。

编写一个用于处理文件下载的Servlet,DownLoadServlet的代码如下:

package me.gacl.web.controller;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.net.URLEncoder;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class DownLoadServlet extends HttpServlet {

 

 

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//得到要下载的文件名

String fileName = request.getParameter("filename"); //23239283-92489-阿凡达.avi

fileName = new String(fileName.getBytes("iso8859-1"),"UTF-8");

//上传的文件都是保存在/WEB-INF/upload目录下的子目录当中

String fileSaveRootPath=this.getServletContext().getRealPath("/WEB-INF/upload");

//通过文件名找出文件的所在目录

String path = findFileSavePathByFileName(fileName,fileSaveRootPath);

//得到要下载的文件

File file = new File(path + "\\" + fileName);

//如果文件不存在

if(!file.exists()){

request.setAttribute("message", "您要下载的资源已被删除!!");

request.getRequestDispatcher("/message.jsp").forward(request, response);

return;

}

//处理文件名

String realname = fileName.substring(fileName.indexOf("_")+1);

//设置响应头,控制浏览器下载该文件

response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(realname, "UTF-8"));

//读取要下载的文件,保存到文件输入流

FileInputStream in = new FileInputStream(path + "\\" + fileName);

//创建输出流

OutputStream out = response.getOutputStream();

//创建缓冲区

byte buffer[] = new byte[1024];

int len = 0;

//循环将输入流中的内容读取到缓冲区当中

while((len=in.read(buffer))>0){

//输出缓冲区的内容到浏览器,实现文件下载

out.write(buffer, 0, len);

}

//关闭文件输入流

in.close();

//关闭输出流

out.close();

}

 

/**

* @Method: findFileSavePathByFileName

* @Description: 通过文件名和存储上传文件根目录找出要下载的文件的所在路径

* @Anthor:孤傲苍狼

* @param filename 要下载的文件名

* @param saveRootPath 上传文件保存的根目录,也就是/WEB-INF/upload目录

* @return 要下载的文件的存储目录

*/

public String findFileSavePathByFileName(String filename,String saveRootPath){

int hashcode = filename.hashCode();

int dir1 = hashcode&0xf; //0--15

int dir2 = (hashcode&0xf0)>>4; //0-15

String dir = saveRootPath + "\\" + dir1 + "\\" + dir2; //upload\2\3 upload\3\5

File file = new File(dir);

if(!file.exists()){

//创建目录

file.mkdirs();

}

return dir;

}

 

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

在Web.xml文件中配置DownLoadServlet


<servlet>

<servlet-name>DownLoadServlet</servlet-name>

<servlet-class>me.gacl.web.controller.DownLoadServlet</servlet-class>

</servlet>

 

<servlet-mapping>

<servlet-name>DownLoadServlet</servlet-name>

<url-pattern>/servlet/DownLoadServlet</url-pattern>

</servlet-mapping> 

 点击【下载】超链接,将请求提交到DownLoadServlet就行处理就可以实现文件下载了,运行效果如下图所示: 

从运行结果可以看到,我们的文件下载功能已经可以正常下载文件了。

想知道更多关于Java的资讯,联系在线客服,或者来惠州北大青鸟新方舟校区了解。

标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学校北大青鸟IT软件学校北大青鸟IT学校


Java技术排行
标签列表
网站分类
文章归档
最近发表