针对JavaWeb文件上传在http://www.runoob.com/servlet/servlet-file-uploading.html上面已经很详细说明的,
但是该网站没有说明文件下载。对于一般的文件直接用a标签的话,如下代码所示。由于浏览器可以解析jpg和txt文件
,故不会直接下载而是在其他网页打开:
<a href="/IT/download/1.gif">下载图片</a> <a href="/IT/download/day10.doc">下载文档</a> <a href="/IT/download/day10.txt">下载笔记</a>
如果想要完成直接下载的目的,可以通过Servlet进行操作,做了一个简单的html页面
<a href="/IT/download?name=1.gif">下载图片1</a> <a href="/IT/download?name=day10.doc">下载文档1</a> <a href="/IT/download?name=day10.txt">下载笔记1</a>
我为download注册了一个servlet,xml描写如下:
<servlet> <servlet-name>DownloadServlet</servlet-name> <servlet-class>com.response.download.DownloadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DownloadServlet</servlet-name> <url-pattern>/download</url-pattern> </servlet-mapping>
由于我的请求方式是get方式,所以只需在DownloadServlet这个类中重写doGet方法,代码实现如下
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取文件名 String filename=request.getParameter("name"); //防止读取name名乱码 filename=new String(filename.getBytes("iso-8859-1"),"utf-8"); //在控制台打印文件名 System.out.println("文件名:"+filename); //设置文件MIME类型 response.setContentType(getServletContext().getMimeType(filename)); //设置Content-Disposition response.setHeader("Content-Disposition", "attachment;filename="+filename); //获取要下载的文件绝对路径,我的文件都放到WebRoot/download目录下 ServletContext context=this.getServletContext(); String fullFileName=context.getRealPath("/download/"+filename); //输入流为项目文件,输出流指向浏览器 InputStream is=new FileInputStream(fullFileName); ServletOutputStream os =response.getOutputStream(); /* * 设置缓冲区 * is.read(b)当文件读完时返回-1 */ int len=-1; byte[] b=new byte[1024]; while((len=is.read(b))!=-1){ os.write(b,0,len); } //关闭流 is.close(); os.close(); }