Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 其他文档 > http以post方式上传一个文件

http以post方式上传一个文件

收藏

本作品内容为http以post方式上传一个文件,格式为 docx ,大小 17006 KB ,页数为 4页

http以post方式上传一个文件


('http以post方式上传一个文件,构造其请求头和消息报文本篇文章主要介绍了"http以post方式上传一个文件,构造其请求头和消息报文(转载)",主要涉及到http以post方式上传一个文件,构造其请求头和消息报文(转载)方面的内容,对于http以post方式上传一个文件,构造其请求头和消息报文(转载)感兴趣的同学可以参考一下。假设接受文件的网页程序位于http://192.168.24.56/logsys/home/uploadIspeedLog!doDefault.html.假设我们要发送一个图片文件,文件名为“kn.jpg”,首先客户端链接192.168.24.56后,应该发送如下http请求:POST/logsys/home/uploadIspeedLog!doDefault.htmlHTTP/1.1Accept:text/plain,Accept-Language:zh-cnHost:192.168.24.56Content-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是IE特有的标志,Mozila为---------------------------71.每个分隔的数据的都可以用Content-Type来表示下面数据的类型,可以参考rfc1341(http://www.ietf.org/rfc/rfc1341.txt)例如:Contect-Type:image/jpeg表示下面的数据是jpeg文件数据============================================================================[转]通过http协议上传文件2008-04-3023:551、概述在最初的http协议中,没有上传文件方面的功能。rfc1867(http://www.ietf.org/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)1.在一个html网页中,写一个如下的form:loadmultifiles:




textfield:
2.服务端servelet的编写现在第三方的httpuploadfile工具库很多。Jarkata项目本身就提供了fileupload包http://jakarta.apache.org/commons/fileupload/。文件上传、表单项处理、效率问题基本上都考虑到了。在struts中就使用了这个包,不过是用struts的方式另行封装了一次。这里我们直接使用fileupload包。至于struts中的用法,请参阅struts相关文档。这个处理文件上传的servelet主要代码如下:publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse){DiskFileUploaddiskFileUpload=newDiskFileUpload();//允许文件最大长度diskFileUpload.setSizeMax(10010241024);//设置内存缓冲大小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));}}}为简略起见,异常处理,文件重命名等细节没有写出。3、客户端发送内容构造假设接受文件的网页程序位于http://192.168.29.65/upload_file/UploadFile.假设我们要发送一个二进制文件、一个文本框表单项、一个密码框表单项。文件名为E:\\s,其内容如下:(其中的XXX代表二进制数据,如010203)abbXXXccc客户端应该向192.168.29.65发送如下内容:POST/upload_file/UploadFileHTTP/1.1Accept:text/plain,Accept-Language:zh-cnHost:192.168.29.65:80Content-Type:multipart/form-data;boundary=---------------------------7d33a816d302b6User-Agent:Mozilla/4.0(compatible;OpenOffice.org)Content-Length:424Connection:Keep-Alive-----------------------------7d33a816d302b6Content-Disposition:form-data;name="userfile1";filename="E:\\s"Content-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中检验通过。(上面有一个回车)用户可以选择多个文件,填写表单其它项,点击“提交”按钮后就开始上传给http://192.168.29.65/upload_file/UploadFile这是一个servelet程序注意enctype="multipart/form-data",method=post,type="file"。根据rfc1867,这三个属性是必须的。multipart/form-data是新增的编码类型,以提高二进制文件的传输效率。具体的解释请参阅rfc1867',)


  • 编号:1700774204
  • 分类:其他文档
  • 软件: wps,office word
  • 大小:4页
  • 格式:docx
  • 风格:商务
  • PPT页数:17006 KB
  • 标签:

广告位推荐

相关其他文档更多>