Servlet实现web站点文件下载功能示例
发布时间:2020-05-24 18:26:49 所属栏目:Java 来源:互联网
导读:Servlet实现web站点文件下载功能示例
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 package com.hyman.view;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class SharedFilesServlet
*/
public class SharedFilesServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public SharedFilesServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request,HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
// TODO Auto-generated method stub
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<script type='text/javascript' language='javascript'>"
+ "function fileDown(obj){"
+ "var resourceName = '';"
+ "var buttonId = obj.getAttribute('id');"
+ "var eleName = buttonId.substring(0,3) + 'File';"
+ "resourceName = document.getElementsByName(eleName)[0].value;"
+ "var url = '/SharingSite/DownFileServlet?fileName=' + resourceName;"
+ "window.location.href=url;"
+ "}"
+ "</script>");
out.println("<h1>文件共享网站</h1>");
out.println("mp3资源:<input type='text' name='mp3File' /> <input type='submit' value ='点击下载' id='mp3Down' onclick='fileDown(this)' /><br/>");
out.println("avi资源:<input type='text' name='aviFile' /> <input type='submit' value ='点击下载' id='aviDown' onclick='fileDown(this)' /><br/>");
out.println("jpg资源:<input type='text' name='jpgFile' /> <input type='submit' value ='点击下载' id='jpgDown' onclick='fileDown(this)' /><br/>");
out.println("txt资源:<input type='text' name='txtFile' /> <input type='submit' value ='点击下载' id='txtDown' onclick='fileDown(this)' /><br/>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request,HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request,IOException {
// TODO Auto-generated method stub
this.doGet(request,response);
}
}
package com.hyman.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class DownFileServlet
*/
public class DownFileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DownFileServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request,IOException {
// TODO Auto-generated method stub
response.setContentType("text/html; charset=utf-8");
String referer = request.getHeader("Referer");
if (referer == null || !referer.startsWith("http://localhost:8080/SharingSite/")) {
response.sendRedirect("/SharingSite/AntiPirateLink");
} else {
String fileName = request.getParameter("fileName");
response.setHeader("Content-Disposition","attachment; filename="+fileName);
String path = this.getServletContext().getRealPath("/resources/"+fileName);
FileInputStream fis = null;
OutputStream os = null;
try {
fis = new FileInputStream(new File(path));
byte buff[] = new byte[1024];
int len = 0;
os = response.getOutputStream();
while ((len = fis.read(buff)) > 0) {
os.write(buff,len);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
} finally {
if (os != null) os.close();
if (fis != null) fis.close();
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request,response);
}
}
package com.hyman.view;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class AntiPirateLink
*/
public class AntiPirateLink extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public AntiPirateLink() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request,IOException {
// TODO Auto-generated method stub
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<script type='text/javascript' language='javascript'>"
+ "var i = 10;"
+ "function showTime(){"
+ "if(i > 0) {document.getElementById('time').innerHTML = '请不要盗链下载... ' + i +' 秒后自动跳转到下载首页...';"
+ "i--;}"
+ "}"
+ "setInterval('showTime()',1000);"
+ "</script>");
out.println("<span id='time'></span>");
response.setHeader("Refresh","10; url=/SharingSite/SharedFilesServlet");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request,response);
}
}
【分析】文件下载部分实现步骤: 1、response.setHeader("Content-Disposition","attachment; filename="+fileName);在http回复消息头中的Content-Disposition中指明下文件的文件名; 2、调用this.getServletContext().getRealPath("/resources/"+fileName);函数获取到文件的全路径; 3、使用文件流FileInputStream将文件读入到服务器内存,重要要用到缓存处理,然后再调用response的getOutputStream()方法获得向客户端写文件的输出文件流; 来自: http://www.cnblogs.com/page-of-Hyman/p/4321523.html 以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
