JSP/Servlet文件上传下载
2014-04-14 23:47
357 查看
文件的上传和下载都是Web应用程序中很常见的功能,比如在论坛中用户可以上传自己的喜欢的头像,邮件系统中用户可以上传附件,到网站上去下载自己喜欢的资源等等。文件的上传也是基于表单来完成的,表单中的file元素可以自动生成一个文本框和一个按钮,文本框可以输入本地文件名或路径,点击按钮则可以打开一个文件选择框让用户选中本地文件。需要注意的是在文件上传时还必须设置表单的enctype属性,并将它的值设置为multipart/form-data。
upload.jsp
<%@pagelanguage="java"pageEncoding="UTF-8"%> <%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"> <html> <head> <title>文件上传</title> </head> <body> <c:iftest="${param.codeeq'001'}"> <divstyle="color:red">上传成功!</div> </c:if> <c:iftest="${param.codeeq'002'}"> <divstyle="color:red">上传失败!</div> </c:if> <formaction="uploadServlet"method="post"enctype="multipart/form-data"> 照片描述:<inputtype="text"name="desc"/><br/> <inputtype="file"name="file1"/><br/> <inputtype="submit"value="提交"/> </form> </body> </html>
uploadServlet.java
importjava.io.File;importjava.io.IOException;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.Iterator;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.commons.fileupload.FileItem;importorg.apache.commons.fileupload.FileUpload;importorg.apache.commons.fileupload.disk.DiskFileItemFactory;publicclassUploadServletextendsHttpServlet{privatefinalStringuploadPath="C:/file/";//用于存放上传文件的目录privatefinalStringtempPath="C:/tempFile";//用于存放临时文件的目录privatefinalintflushSize=1024*512;//缓冲区大小privatefinallongfileSize=10*1024*1024;//文件最大大小publicvoidinit()throwsServletException{Filefile=newFile(uploadPath);if(!file.exists()){file.mkdir();}file=newFile(tempPath);if(!file.exists()){file.mkdir();}}publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//判断from表单的enctype属性值是否设置为multipart/form-databooleanisMultipart=FileUpload.isMultipartContent(request);if(!isMultipart){return;}try{DiskFileItemFactoryfactory=newDiskFileItemFactory();//设置缓冲区大小factory.setSizeThreshold(flushSize);factory.setRepository(newFile(tempPath));//创建FileUpload对象FileUploadupload=newFileUpload(factory);//设置文件最大大小upload.setSizeMax(fileSize);Listitems=upload.parseRequest(request);Iteratoriter=items.iterator();while(iter.hasNext()){FileItemitem=(FileItem)iter.next();//判断是否是file表单元素if(!item.isFormField()){Stringname=item.getName();//获得文件路径及名称name=name.substring(name.lastIndexOf(File.separator)+1,name.length());//获得文件名StringfileType=name.substring(name.indexOf("."));//获得文件后缀名Stringfilename=getFileName();//随机产生一个文件名防止文件名重复longsize=item.getSize();//如果文件名不存在则不处理if((name==null||name.equals(""))&&size==0){continue;}item.write(newFile(uploadPath+filename+fileType));}else{//获得文件描述Stringdesc=item.getString("UTF-8");System.out.println(desc);}}response.sendRedirect("upload.jsp?code=001");}catch(Exceptione){e.printStackTrace();response.sendRedirect("upload.jsp?code=002");}}privateStringgetFileName(){//根据时间产生文件名SimpleDateFormatdf=newSimpleDateFormat("yyyyMMddhhmmssms");returndf.format(newDate());}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);}}
文件下载:
通过超链接下载文件,会暴露了下载文件在服务器中的真实地址,不利于对资源进行安全保护,而且利用超链接下载文件,服务器端得文件只能存放在Web应用程序所在的目录下。利用程序编码实现下载,可以增加安全机制,比如我们只能让VIP会员下载等等。还可以从任意位置进行下载,我们可以将文件放到Web应用程序以外的目录中。显示文件夹内所有文件的servlet:importjava.io.File;importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassShowFileServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringpath="c:/file";//声明集合存放目录下所有文件的文件名List<String>fileList=newArrayList<String>();Filefolder=newFile(path);//判断文件夹是否存在并且是否是一个目录if(folder.exists()&&folder.isDirectory()){//获得目录中所有文件及目录File[]files=folder.listFiles();for(Filefile:files){//如果是文件if(file.isFile()){//将文件名放入集合中fileList.add(file.getName());}}}request.setAttribute("fileList",fileList);request.getRequestDispatcher("showfile.jsp").forward(request,response);}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);}}
showfile.jsp
<%@pagelanguage="java"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>显示所有文件</title></head><body>请选择您要下载的文件:<br/><c:forEachitems="${fileList}"var="fileName"><ahref="downLoadServlet?filename=${fileName}">${fileName}</a><br/></c:forEach></body></html>
DownLoadServlet.java
importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjavax.servlet.ServletException;importjavax.servlet.ServletOutputStream;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassDownLoadServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringpath="C:/file";StringfileName=request.getParameter("filename");Filefile=newFile(path+"/"+fileName);//如果文件存在if(file.exists()){//设置响应类型及响应头response.setContentType("application/x-msdownload");response.addHeader("Content-Disposition","attachment;filename=\""+fileName+"\"");//读取文件InputStreaminputStream=newFileInputStream(file);BufferedInputStreambis=newBufferedInputStream(inputStream);byte[]bytes=newbyte[1024];ServletOutputStreamoutStream=response.getOutputStream();BufferedOutputStreambos=newBufferedOutputStream(outStream);intreadLength=0;while((readLength=bis.read(bytes))!=-1){bos.write(bytes,0,readLength);}//释放资源inputStream.close();bis.close();bos.flush();outStream.close();bos.close();}}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);}}
相关文章推荐
- JSP/Servlet文件上传与下载
- Servlet和Jsp实现原生的上传与下载文件
- Jsp+Servlet实现文件上传下载(三)--删除上传文件
- Java+jsp+Servlet实现文件上传和下载
- Jsp/Servlet:实现文件上传与下载
- Jsp+Servlet实现文件上传下载(四)--下载文件
- Jsp+Servlet实现文件上传下载 文件列表展示(二)
- jsp+servlet实现文件上传与下载功能
- jsp+servlet实现文件的上传和下载
- 使用jsp/servlet简单实现文件上传与下载
- jsp+servlet用底层代码实现文件上传下载
- Jsp+Servlet实现文件上传下载(二)--文件列表展示
- 文件上传和下载(一)--【jsp+servlet】
- servlet+jsp实现的文件上传与下载
- jsp+servlet+commons-fileupload-1.3.jar+commons-io-2.4.jar+jstl标签库实现文件上传与下载
- 【ZT】Jsp/Servlet:实现文件上传与下载【一】
- Jsp/Servlet:实现文件上传与下载 推荐
- 使用JSP+Servlet实现文件上传下载
- jsp+servlet实现文件的上传和下载 运用了Apache Commons组件
- 【ZT】Jsp/Servlet:实现文件上传与下载【二】