文件上传与下载_第1页
文件上传与下载_第2页
文件上传与下载_第3页
文件上传与下载_第4页
文件上传与下载_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

第十三课文件上传与下载回顾set标签中var和scope属性支持EL表达式么,value属性与本体内容能否同时出现,如果value属性与本体内容都没有指定则赋值给var变量值是多少?set标签中如果将value值或本体值指定给一个对象(target)的属性(property),则该标签中还能出现scope属性么?out标签中本体与default属性能否同时出现,二者在都不指定的情况下其输出的默认值是什么?out标签中的escapeXml属性起什么作用,out标签中有无scope属性?remove标签中的scope属性默认值是什么?要完成多分支选择应该使用if标签还是choose标签?forEach与forTokens迭代标签中的var与varStatus属性是否支持EL表达式?forEach标签中的varStatus属性有哪些常用的属性?begin、step与end标签的作用是什么?forEach标签与forTokens标签有何区别?本章案例使用apache工具完成文件上传在Servlet容器下完成文件下载本章目标在Servlet中完成文件上传与文件下载上传组件介绍1、commons-fileupload-1.2.1.jar与commons-io-1.4.jar文件是apache开源小组的结晶,通过他们可以在支持Servlet的容器中完成基于HTTP协议流的文件上传2、这两个组件是基于在Servlet下完成文件上传的,当过度到Struts2时代之后,框架对这两个组件做了一次封装,从操作上表现的更为人性化3、如果不使用第三方组件来完成文件上传,则必须自己解析HTTP协议流提取上传文件数据第一步:1、在MyEclipse中新建一个web工程2、在工程目录下新建一个lib文件夹,将下载的commons- fileupload-1.2.1.jar与commons-io-1.4.jar文件拷贝到lib文件夹下,右键点击此两个文件选择addbuildpath将其添加到构建路径中第二步:1、新建Servlet类FileUploadTest,并重写doGet与doPost方法;在doGet方法中调用doPost方法2、在web.xml文件中配置Servlet<servlet> <servlet-name>fileUploadTest</servlet-name> <servlet-class>com.scxh.upload.FileUploadTest</servlet-class></servlet><servlet-mapping> <servlet-name>fileUploadTest</servlet-name> <url-pattern>/fileUploadTest</url-pattern></servlet-mapping>第三步:创建JSP页面file.jsp,表单html片段如下:<formaction="fileUploadTest"method="post"enctype="multipart/form-data">用户名:<inputname="username"value="李刚"/><br><br>密    码:<inputtype="password"name="password"value="123456"/><br><br>爱    好:<inputtype=“checkbox”name=“loves”value=“basketball”/>篮球<inputtype=“checkbox”name=“loves”value=“football”/>足球<br><br>上    传:<inputtype="file"name="fileAttach"><br><br><inputtype="submit"value="提交"/><inputtype="reset"value="重置"/></form>第四步:在Post方法体中编写Servlet代码如下:DiskFileItemFactoryfactory=newDiskFileItemFactory();ServletFileUploadupload=newServletFileUpload(factory);List<FileItem>items=upload.parseRequest(request);//参数是HttpServletRequest对象for(FileItemitem:items){遍历所有客户端提交的参数(包括文件域)if(item.isFormField()){//键为普通表单域Stringkey=item.getFieldName();//取出普通表单域的键Stringvalue=item.getString();//取出普通表单域的值}else{//键为文件域Stringkey=item.getFieldName();//取出文件域的键Stringvalue=item.getName();//取出文件域的值longfileLen=item.getSize();//取出上传文件的尺寸StringmimeType=item.getContentType();//取出上传文件的类型item.write(newFile(“D:/xxx.xxx”));//保存上传的文件到服务器本地}}Accp组件介绍1、这个组件实际上是对apache组件的一种包装,该组件对Accp组件包装之后更加人性化的支持上传了,使用该组件只需要将accp2.013.11.08.jar包添加到当前工程的classpath路径中,而不再需要导入commons-fileupload-1.2.1.jar和commons-io-1.4.jar文件2、使用该组件只需要修改Servlet代码即可,其它的配置不发生任何变动该组件的原理是使用FileUpload包装请求对象request和要保存的上传文件路径,然后使用FileUpload调用upload(不解码)或uploadAndDecoding(解码)解析上传HTTP流并返回UploadRequest,一旦得到UploadRequest对象之后剩下的操作就和普通的HttpServletRequest对象操作相同了

//第一个参数表示HttpServletRequest对象,第二个参数表示要保存的文件路径FileUploadfileUpload=newFileUpload(request,“/upload”);UploadRequestupload=fileUpload.uploadAndDecoding();//获取普通参数Stringusername=(String)upload.getParameter("username");Stringpassword=(String)upload.getParameter("password");//如果一个键对应两个值则返回List列表List<String>loves=(List<String>)upload.getParameter("loves");//获取文件域UploadFileuploadFile=(UploadFile)upload.getParameter("fileAttach");System.out.println(username+":"+password);System.out.println("loves:"+loves);System.out.println("fileName:"+uploadFile.getFileName());System.out.println("FileSize:"+uploadFile.getFileSize());System.out.println("MimeType:"+uploadFile.getMimeType());文件下载简介1、默认情况下,客户端只要直接请求一个文件则服务端将推送这个文件到客户端,如果客户端不识别该文件则默认情况下将会弹出一个另存为的下载提示,但是对于浏览器能够识别的文件则可能会被浏览器直接打开2、如果要使浏览器能够正确的弹出下载文件的另存为提示则必须在推送头中加上一个称之为Content-Disposition的头,加上该推送头之后,浏览器能够将其当成附件并给出下载文件的提示第一步:1、新建Servlet类FileDownloadTest,并重写doGet与doPost方法;在doGet方法中调用doPost方法2、在web.xml文件中配置Servlet<servlet> <servlet-name>fileDownloadTest</servlet-name> <servlet-class>com.scxh.download.FileDownloadTest</servlet-class></servlet><servlet-mapping> <servlet-name>fileDownloadTest</servlet-name> <url-pattern>/fileDownloadTest</url-pattern></servlet-mapping>第二步:创建JSP页面file.jsp,表单html片段如下:<body><spanstyle="color:red;font-size:22px;font-weight:bolder;">文件下载</span><hrcolor="green"width="100%"size="2"/>

<!–直接请求浏览器认识的文件可能被浏览器直接打开--><ahref="download/test.doc">下载阶段实训表</a>

<!–直接请求浏览器不认识的文件可能被浏览器当成附件而弹出下载提示,但是下载的具体文件名被get的提交方式暴露出来--><ahref="download/jprofiler_windows_5_1_4.zip">下载JProfiler请点击这里</a>

<!–使用Servlet方式完成get/post下载可以不用暴露文件名(下载的文件通过提 交的参数进行映射),且能保证浏览器将所有文件当成附件下载--><ahref=“fileDownloadTest?fileName=温江电子信息产业园入园规模企业.doc”> 下载文件海峡科技园公司明细</a></body>第三步:在Post方法体中编写Servlet代码如下://利用前面的Accp组件提供的编码功能完成请求处理以防产生乱码HttpServletRequestrequest=newFileUpload(req).getRequest();StringfileName=request.getParameter("fileName");//此步设置浏览器弹出的提示内容,这些内容必须经过URL编码,否则将出现下载问题StringshowFileName=URLEncoder.encode(fileName,"UTF-8");//获取将要下载文件的输入流,参数以右斜杆开始表示工程根路径InputStreamis=getServletContext().getResourceAsStream("/download/"+fileName);//必须增加此header头以保证浏览器将其当成附件下载response.addHeader("Content-Disposition","attachment;filename="+showFileName);OutputStreamos=response.getOutputStream();b

温馨提示

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

评论

0/150

提交评论