浏览 3533 次
锁定老帖子 主题:Servlet实现文件上传下载
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-10-17
a) 在form表单中添加enctype=“multipart/from-data“ b) ②当在表单中添加enctype,request中提交的数据形式就发生了改变,我们就不能以request.getParameter这种方式接受数据了,我们需要对request中接受的数据进行处理后才能接受 接受客户端提交的文件的方式有两种: ① fileupload上传:依赖于commons包中的jar文件 a) 将四个jar文件导入工程文件中 //在Servlet接受页面提交的数据 //通过传统的request接受方式,我们只能够接收到客户端提交的文本信息 //如果客户端想服务器端提交一个文件,服务器端则无法接受提交的文件 // String file=req.getParameter("myFile"); // String des=req.getParameter("des"); // System.out.println(file+"<><><>\n"+"<><><>"+des); try { //创建一个临时指定临时文件夹存放 DiskFileItemFactory temp=new DiskFileItemFactory(1000,new File("D:/file")); //创建上传工具--接受客户端上传的文件 ServletFileUpload sfu=new ServletFileUpload(temp); //通过上传工具对request中的数据进行处理 //因为用户提交的所有数据都是通过request提交,那么我们可以通过上传工具取到request中的所有数据,存放到一个集合中 List list=sfu.parseRequest(request); //遍历集合,取到集合中文件或者字段 Iterator it= list.iterator(); while (it.hasNext()) { FileItem fi = (FileItem) it.next(); //判断每一个条目是文件还是字段 if(fi.isFormField()){ //如果是一个字段,则取到字段名和字段值 String fileName=fi.getFieldName(); String fileValue=fi.getString("GBK"); System.out.println(fileName+"<><><><"+fileValue); }else{ //如果不是字段,则表示fi是一个文件,我们需要获取文件的名字,然后把文件保存到指定的目录 String path=fi.getName(); String fileName=path.substring(path.lastIndexOf("\\")+1); String savePath=getServletContext().getRealPath("/file/")+"/"+fileName; fi.write(new File(savePath)); } } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } ② SmartUpload上传:依赖于一个第三方架包SmartUpload.jar包 //创建解析工具 SmartUpload su = new SmartUpload(); //通过工具对request中的数据进行初始化 su.initialize(getServletConfig(), request, response); //设置上传文件是限制信息:设置允许上传的单个文件的最大值,设置允许上传文件的类型 su.setMaxFileSize(1024*1024*10); su.setAllowedFilesList("jpg,jpeg,bmp,gif,png"); //开始接收客户端的上传 su.upload(); //取到上传的所有文件(files相当于一个集合) Files fs = su.getFiles(); //取到fs中文件的个数 for (int i = 0; i < fs.getCount(); i++) { File f = fs.getFile(i); String fName = f.getFileName(); //取到服务器上的files文件夹的路径 String savePath = getServletContext().getRealPath("/file")+"/"+fName; f.saveAs(savePath); } //从su不能够直接取到字段,但是我们可以取到一个经过处理了的request对象 Request req = su.getRequest(); String des = req.getParameter("des"); System.out.println(des); //上传成功之后跳转到列表页面,在列表页面中显示files文件夹中的所有文件 String path = getServletContext().getRealPath("/file"); java.io.File dir = new java.io.File(path); String[] names = dir.list(); List<String> fileNames = new ArrayList<String>(); for (int i = 0; i < names.length; i++) { fileNames.add(names[i]); } request.setAttribute("ns", fileNames); request.getRequestDispatcher("list.jsp").forward(request, response); 文件下载: //接受客户端需要下载的文件的文件名 String name=request.getParameter("fname"); String path=getServletContext().getRealPath("/file")+"/"+name; InputStream is=new FileInputStream(path); OutputStream os=response.getOutputStream(); response.setContentType("application/exe.pdf"); response.addHeader("Content-Disposition", "attachment;filename="+name); byte[] b=new byte[500]; int len=-1; while((len=is.read(b))!=-1){ os.write(b, 0, len); os.flush(); } os.close(); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |