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>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。