http协议上传文件_第1页
http协议上传文件_第2页
http协议上传文件_第3页
http协议上传文件_第4页
http协议上传文件_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

竭诚为您提供优质文档/双击可除http协议上传文件篇一:http以post方式上传一个文件http以post方式上传一个文件,构造其请求头和消息报文本篇文章主要介绍了〃http以post方式上传一个文件,构造其请求头和消息报文(转载)〃,主要涉及到http以post方式上传一个文件,构造其请求头和消息报文(转载)方面的内容,对于http以post方式上传一个文件,构造其请求头和消息报文(转载)感兴趣的同学可以参考一下。假设接受文件的网页程序位于6/logsys/home/uploadispeedlog1dodefault.html.假设我们要发送一个图片文件,文件名为“kn.jpg”,首先客户端链接6后,应该发送如下http请求:post/logsys/home/uploadispeedlog!dodefault.htmlhttp/1.1accept:text/plain,*/*accept-language:zh-cnhost:6content-type:multipart/form-data;boundary= 7db372eb000e2user-agent:winhttpclientcontent-length:3693connection:keep-alive 7db372eb000e2content-disposition:form-data;name="file";filename="kn.jpg"content-type:image/jpeg(此处省略jpeg文件二进制数据...) 7db372eb000e2--此内容必须一字不差,包括最后的回车,红色字体部分就是协议的头。给服务器上传数据时,并非协议头每个字段都得说明,其中,content-type是必须的,它包括一个类似标志性质的名为boundary的标志,它可以是随便输入的字符串。对后面的具体内容也是必须的。它用来分辨一段内容的开始。content-length:3693,这里的3693是要上传文件的总长度。绿色字体部分就是需要上传的数据,可以是文本,也可以是图片等。数据内容前面需要有content-disposition,content-type以及content-transfer-encoding等说明字段。最后的紫色部分就是协议的结尾了。注意这一行:content-type:multipart/form-data;boundary= 7db372eb000e2根据rfc1867,multipart/form-data是必须的. 7db372eb000e2是分隔符,分隔多个文件、表单项。其中b372eb000e2是即时生成的一个数字,用以确保整个分隔符不会在文件或表单项的内容中出现。Form每个部分用分隔符分割,分隔符之前必须加上〃一〃着两个字符(即一{boundary})才能被http协议认为是Form的分隔符,表示结束的话用在正确的分隔符后面添加〃一〃表示结束。前面的 7d是1。特有的标;fe,mozila为 71.每个分隔的数据的都可以用content-type来表示下面数据的类型,可以参考rfc1341(/rfc/rfc1341.txt)例如:contect-type:image/jpeg表示下面的数据是jpeg文件数据[转]通过http协议上传文件20xx-04-3023:553 191、概述在最初的http协议中,没有上传文件方面的功能。rfc1867(/rfc/rfc1867.txt)为http协议添加了这个功能。客户端的浏览器,如microsoftie,mozila,opera等,按照此规范将用户指定的文件发送到服务器。服务器端的网页程序,如php,asp,jsp等,可以按照此规范,解析出用户发送来的文件。microsoftie,mozila,opera已经支持此协议,在网页中使用一个特殊的form就可以发送文件。绝大部分httpserver,包括tomcat,已经支持此协议,可接受发送来的文件。各种网页程序,如php,asp,jsp中,对于上传文件已经做了很好的封装。2、上传文件的实例:用servelet实现(httpserver为tomcat4.1.24).在一个html网页中,写一个如下的form:loadmultifiles:textfield:.服务端servelet的编写现在第三方的httpuploadfile工具库很多。jarkata项目本身就提供了fileupload包/commons/fileupload/。文件上传、表单项处理、效率问题基本上都考虑到了。在struts中就使用了这个包,不过是用struts的方式另行封装了一次。这里我们直接使用fileupload包。至于struts中的用法,请参阅struts相关文档。这个处理文件上传的servelet主要代码如下:publicvoiddopost(httpservletRequestrequest,httpservletResponseresponse){diskFileuploaddiskFileupload=newdiskFileupload();//允许文件最大长度diskFileupload.setsizemax(100*1024*1024);//设置内存缓冲大小diskFileupload.setsizethreshold(4096);//设置临时目录diskFileupload.setRepositorypath(〃c:/tmp〃);listfileitems=diskFileupload.parseRequest(request);iteratoriter=fileitems.iterator();for(;iter.hasnext();){Fileitemfileitem=(Fileitem)iter.next();if(fileitem.isFormField()){//当前是一个表单项out.println(〃formfield:〃+fileitem.getFieldname()+〃,〃+fileitem.getstring());}else{//当前是一个上传的文件stringfilename=fileitem.getname();fileitem.write(newFile(〃c:/uploads/〃+filename));}}}为简略起见,异常处理,文件重命名等细节没有写出。6 193、客户端发送内容构造假设接受文件的网页程序位于5/upload_file/uploadFile.假设我们要发送一个二进制文件、一个文本框表单项、一个密码框表单项。文件名为。:",其内容如下:(其中的xxx代表二进制数据,如010203)abbxxxccc客户端应该向5发送如下内容:post/upload_file/uploadFilehttp/1.1accept:text/plain,*/*accept-language:zh-cnhost:5:80content-type:multipart/form-data;boundary= 7d33a816d302b6user-agent:mozilla/4.0(compatible;)content-length:424connection:keep-alive7 197d33a816d302b6content-disposition:form-data;name="userfile1";filename-e:\scontent-type:application/octet-streamabbxxxccc 7d33a816d302b6content-disposition:form-data;name-〃text1〃foo 7d33a816d302b6content-disposition:form-data;name-〃password1〃bar 7d33a816d302b6--此内容必须一字不差,包括最后的回车。注意:content-length:424这里的424是红色内容的总长度(包括最后的回车)注意这一行:content-type:multipart/form-data;boundary- 7d33a816d302b6根据rfc1867,multipart/form-data是必须的. 7d33a816d302b6是分隔符,分隔多个文件、表单项。其中33a816d302b6是即时生成的一个数字,用以确保整个分隔符不会在文件或表单项的内容中出现。前面的 7d是ie特有的标志。mozila为 71用手工发送这个例子,在上述的servlet中检验通过。(上面有一个回车)用户可以选择多个文件,填写表单其它项,点击“提交”按钮后就开始上传给5/upload_file/uploadFile这是一个servelet程序注意enctype二〃multipart/form-data〃,method=post,type二〃file”。根据rfc1867,这三个属性是必须的。multipart/form-data是新增的编码类型,以提高二进制文件的传输效率。具体的解释请参阅rfc1867篇二:使用http协议上传比较大的文件档案使用http协议上传比较大的文件档案,比如通过web方式在邮箱里发送包含交大附件的邮件,附件上传的时间往往会拖很久。微软表示这与带宽无关,而是因为系统winsock默认的传送缓冲区太小了(只有8kb)。只要修改一下缓冲区大小,http龟速上传的情况就可以大大改观。修改的方法很简单,打开注册表后,定位分支9 19〔hkey_cuRRent_useR\software\microsoft\windows\currentVersion\internetsettings〕然后在右侧窗口里的空白处,右键单击,新建一名为〃socketsendbufferlength〃的dwoRd值,然后“数值数据”输入“4000”(十六进制,即16kb),点击确认保存修改。最后重启电脑即可将winsock默认的传送缓冲区设置为16kb。篇三:http服务器实现文件上传与下载http服务器实现文件上传与下载(一)一、弓1言大家都知道web编程的协议就是http协议,称为超文本传输协议。在j2ee中我们可以很快的实现一个web工程,但在c++中就不是非常的迅速,原因无非就是底层的socket网络编写需要自己完成,上层的http协议需要我们自己完成,用户接口需要我

温馨提示

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

评论

0/150

提交评论