commons_fileupload实现文件上传下载.docx_第1页
commons_fileupload实现文件上传下载.docx_第2页
commons_fileupload实现文件上传下载.docx_第3页
commons_fileupload实现文件上传下载.docx_第4页
commons_fileupload实现文件上传下载.docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网上看了很多样例,但是有很多都是过时的,里面使用的包中的FileUpload类在新的1.2里面已经改变,所以我们不能照搬原来的方法 ,除非你放弃使用新版本的jar包。2.1 jsp方式上传upload.jsp文件上传演示文件上传演示文件1:文件2:文件3:该文件唯一要注意的地方就是红色粗体的地方,其他的没有什么区别。而正是在这个奇怪的参数上,我们利用servlet处理表单的时候就带来了一个特殊的处理方式(见后分析);save.jsp保存上传文件文件列表:文件名大小%String msg = ;DiskFileUpload fu = new DiskFileUpload();/ 设置允许用户上传文件大小,单位:字节/ fu.setSizeMax(10000000);/ 设置最多只允许在内存中存储的数据,单位:字节/ fu.setSizeThreshold(4096);/ 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录/(临时存放目录,文件上传完毕后有办法清除它吗?)fu.setRepositoryPath(D:TEMP);/开始读取上传信息List fileItems = fu.parseRequest(request);/ 依次处理每个上传的文件Iterator iter = fileItems.iterator();while (iter.hasNext() FileItem item = (FileItem) iter.next();/忽略其他不是文件域的所有表单信息if (!item.isFormField() String name = item.getName();/获取上传的文件名long size = item.getSize();/获取上传的文件大小(字节为单位)if(name=null|name.equals() & size=0)continue;/跳到while检查条件out.println();out.println( + name + );out.println( + size + );/以下为文件名处理,将上传的文件保存在项目所在目录下。/获取文件名字符串的长度int end = name.length();/返回在此字符串中最右边出现的指定子字符串的索引。int begin = name.lastIndexOf();File savedFile = new File(c:TEMP, name.substring(begin+1,end); item.write(savedFile);%返回上传页面以上两个文件均是来自网上,我已经做了局部修改。2. SERVLET的处理前面提到了那个特殊的form 参数ENCTYPE=multipart/form-data,我在做servlet的时候用通常的request.getParameter(id),无法捕捉到该form 表单的值。我们要特殊处理这个表单。以下截取的部分servlet内容:假设 我的form里面有 id,serid,adjunctname 3个name,而adjunctname的type是file的,其他的是text的。String id = ChineseString.chineseStr(request.getParameter(id);String serid = ChineseString.chineseStr(request.getParameter(serid);String adjunctname = ChineseString.chineseStr(request.getParameter(adjunctname);String oldFile = ChineseString.chineseStr(request.getParameter(oldFile);String downLoadFile = ChineseString.chineseStr(request.getParameter(downLoadFile);if (ServletFileUpload.isMultipartContent(request) / Create a factory for disk-based file itemsDiskFileItemFactory factory = new DiskFileItemFactory();/ Set factory constraintsfactory.setSizeThreshold(20 * 1024);factory.setRepository(factory.getRepository();/ Create a new file upload handlerServletFileUpload upload = new ServletFileUpload(factory);/ Set overall request size constraintupload.setFileSizeMax(20 * 1024 * 1024);List formlists = null;try formlists = upload.parseRequest(request); catch (FileUploadException e1) / TODO Auto-generated catch blocke1.printStackTrace();Iterator iter = formlists.iterator();while (iter.hasNext() FileItem formitem = (FileItem) iter.next();if (!formitem.isFormField() String name = ChineseString.chineseStr(formitem.getName();adjunctsize = new Long(formitem.getSize().toString();if (name = null | name.equals()& adjunctsize.equals(0)continue;/ 获取纯粹的文件名adjunctname = name.substring(name.lastIndexOf() + 1);String suffixName = .+ adjunctname.substring(adjunctname.lastIndexOf(.) + 1);newadjunctname = new Long(GetTime.getSystemCalendar().toString()+ suffixName;/ 创建文件File savefile = new File(IConstant.ADJUNTFILEPATH+ newadjunctname);/ File savefile=new File(c:TEMP + newadjunctname);/ 写入文件try formitem.write(savefile); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();elseString formname=formitem.getFieldName();/获取form中的名字String formcontent=formitem.getString();formname=new String(formname.getBytes(),gb2312);formcontent=new String(formcontent.getBytes(),gb2312);if (formname.equals(id)id = formcontent;else if(formname.equals(serid)serid = formcontent;当我提交页面时得到的id 和serid 均是空的,于是做了这样的一个处理if (!formitem.isFormField() 判断是否是文件域,如果不是转向文本域处理String formname=formitem.getFieldName();/获取form中的名字String formcontent=formitem.getString();formname=new String(formname.getBytes(),gb2312);formcontent=new String(formcontent.getBytes(),gb2312);if (formname.equals(id)id = formcontent;else if(formname.equals(serid)serid = formcontent;这样才能得到正确的form 中id,serid的值3. 文件名称或路径乱码的处理在servelet的处理代码里面,我们看见了一些字符编码的转换,如:aString downLoadFile = ChineseString.chineseStr(request.getParameter(downLoadFile);bformname=new String(formname.getBytes(),gb2312);ChineseString.chineseStr 是自己做的一个公共的转换函数,内容如下:public static String chineseStr(String str) try if (str = null)return ;String tempStr = str;byte tempArray = tempStr.getBytes(ISO8859-1);String temp = new String(tempArray);return temp; catch (Exception ex) System.out.println(Exception : mon.ChineseString/chineseStr() + ex.getMessage();return ;4. 下载页面有了上传页面,我们在添加一个下载的页面:50)oldFile=oldFile.substring(0,20);if (!.equals(downLoadFile) String fullFileName = downLoadFile;File file = new File(fullFileName);if (file.exists() try FileInputStream fileContext = new FileInputStream(fullFileName); BufferedInputStream inStream = new BufferedInputStream(fileContext); response.reset(); response.setContentType(application/x-msdownload); oldFile = .URLEncoder.encode(oldFile, utf-8); response.setHeader(Content-Disposition, attachment; filename=+ oldFile);/ response.setHeader(content-encoding,gzip);/ response.setHeader(content-encoding,compress); OutputStream sOut = response.getOutputStream(); byte b = new byte4096; int len = 0; while ( (len = inStream.read(b) != -1) sOut.write(b, 0, len); sOut.close(); catch (IOException ex) /System.out.println(Exception : downLoad.jsp + ex.getMessage(); else response.sendRedirect(error.jsp?closeFlag=1&message= + ChineseString.URLEncode(下载的文件不存在!);else response.sendRedirect(error.jsp?closeFlag=1&message= + ChineseString.URLEncode(下载文件时参数错误!);%这个文件中的oldFile和 downLoadFile 就是为了解决下载乱码和下载文件名称而做的参数。如果缺少oldFile的处理 文件将会显示的下载名称为DownLoad.jsp。而IConstant.ADJUNTFILEPATH 变量定义的是附件存放的地方,在使用中定义以下是还涉及到下载页面的部分jsp代码:a class=listlink href=javascript:onclick=confirmDel(,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论