Servlet实现文件下载功能
本文实例为大家分享了Servlet实现文件下载的具体代码,供大家参考,具体内容如下
把文件目录直接暴露给用户是很不安全的。所以要用Servlet来做,而且这样做,文件的存储方式就更丰富了,可以是从文件系统上取来的,也可以是数据库中经过计算生成的,或者从其它什么稀奇古怪的地方取来的。
publicclassDownloadServletextendsHttpServlet{
privateStringcontentType="application/x-msdownload";
privateStringenc="utf-8";
privateStringfileRoot="";
/**
*初始化contentType,enc,fileRoot
*/
publicvoidinit(ServletConfigconfig)throwsServletException{
StringtempStr=config.getInitParameter("contentType");
if(tempStr!=null&&!tempStr.equals("")){
contentType=tempStr;
}
tempStr=config.getInitParameter("enc");
if(tempStr!=null&&!tempStr.equals("")){
enc=tempStr;
}
tempStr=config.getInitParameter("fileRoot");
if(tempStr!=null&&!tempStr.equals("")){
fileRoot=tempStr;
}
}
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
Stringfilepath=request.getParameter("filepath");
StringfullFilePath=fileRoot+filepath;
/*读取文件*/
Filefile=newFile(fullFilePath);
/*如果文件存在*/
if(file.exists()){
Stringfilename=URLEncoder.encode(file.getName(),enc);
response.reset();
response.setContentType(contentType);
response.addHeader("Content-Disposition","attachment;filename=\""+filename+"\"");
intfileLength=(int)file.length();
response.setContentLength(fileLength);
/*如果文件长度大于0*/
if(fileLength!=0){
/*创建输入流*/
InputStreaminStream=newFileInputStream(file);
byte[]buf=newbyte[4096];
/*创建输出流*/
ServletOutputStreamservletOS=response.getOutputStream();
intreadLength;
while(((readLength=inStream.read(buf))!=-1)){
servletOS.write(buf,0,readLength);
}
inStream.close();
servletOS.flush();
servletOS.close();
}
}
}
web.xml
downloadservlet-name> org.mstar.servlet.DownloadServletservlet-class> fileRootparam-name> d:/tempparam-value> init-param> contentTypeparam-name> application/x-msdownloadparam-value> init-param> encparam-name> utf-8param-value> init-param> servlet> downloadservlet-name> /downurl-pattern> servlet-mapping>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。