淮北市建设局网站,易语言怎么做ifa网站填表,阿里云网站建设初衷,wordpress简约下载站模板下载含义 ENCTYPEmultipart/form-data 说明#xff1a;通过 http 协议上传文件 rfc1867协议概述#xff0c;客户端发送内容构造。概述在最初的 http 协议中#xff0c;没有上传文件方面的功能。 rfc1867为 http 协议添加了这个功能。客户端的浏览器#xff0c;如 M…含义 ENCTYPEmultipart/form-data 说明通过 http 协议上传文件 rfc1867协议概述客户端发送内容构造。概述在最初的 http 协议中没有上传文件方面的功能。 rfc1867为 http 协议添加了这个功能。客户端的浏览器如 Microsoft IE, Mozila, Opera 等按照此规范将用户指定的文件发送到服务器。服务器端的网页程序如 php, asp, jsp 等可以按照此规范解析出用户发送来的文件。Microsoft IE, Mozila, Opera 已经支持此协议在网页中使用一个特殊的 form 就可以发送文件。绝大部分 http server 包括 tomcat 已经支持此协议可接受发送来的文件。各种网页程序如 php, asp, jsp 中对于上传文件已经做了很好的封装。实例注意 enctypemultipart/form-data, methodpost, typefile 。根据 rfc1867, 这三个属性是必须的。multipart/form-data 是新增的编码类型以提高二进制文件的传输效率。数据传输格式 必须一字不差包括最后的回车。注意Content-Length: 226 这里的226是红色内容的总长度(包括最后的回车)注意这一行Content-Type: multipart/form-data; boundary-----------------------------264141203718551根据 rfc1867, multipart/form-data是必须的.---------------------------7d33a816d302b6 是分隔符分隔多个文件、表单项。其中7d33a816d302b6 是即时生成的字符串用以确保整个分隔符不会在文件或表单项的内容中出现。使用POST发送数据以POST方式发送数据主要是为了向服务器发送较大量的客户端的数据它不受URL的长度限制。POST请求将数据以URL编码的形式放在HTTP正文中字段形式为fieldnamevalue用分隔每个字段。注意所有的字段都被作为字符串处理。实际上我们要做的就是模拟浏览器POST 一个表单。以下是IE发送一个登陆表单的POST请求POST http://127.0.0.1/login.do HTTP/1.0Accept: image/gif, image/jpeg, image/pjpeg, */*Accept-Language: en-us,zh-cn;q0.5Content-Type: application/x-www-form-urlencodedUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)Content-Length: 28usernameadminpassword1234要在MIDP应用程序中模拟浏览器发送这个POST请求首先设置HttpConnection的请求方式为POST(PHP为curl)// 使用POST方法httpURLConnection.setRequestMethod(POST);然后构造出HTTP正文byte[] data usernameadminpassword1234.getBytes();并计算正文长度填入Content-Type和Content-LengthhttpURLConnection.setRequestProperty(Content-Type, application/x-www-form-urlencoded);httpURLConnection.setRequestProperty(Content-Length, String.valueOf(data.length));然后打开OutputStream将正文写入OutputStream output hc.openOutputStream();output.write(data);需要注意的是数据仍需要以URL编码格式编码由于MIDP库中没有J2SE中与之对应的URLEncoder类因此需要自己动手编写这个 encode()方法可以参考java.net.URLEncoder.java的源码。剩下的便是读取服务器响应代码与GET一致这里就不再详述。使用multipart/form-data发送文件如果要在MIDP客户端向服务器上传文件我们就必须模拟一个POST multipart/form-data类型的请求Content-Type必须是multipart/form-data。以multipart/form-data编码的POST请求格式与application/x-www-form-urlencoded完全不同multipart/form-data需要首先在HTTP请求头设置一个分隔符例如ABCDhttpURLConnection.setRequestProperty(Content-Type, multipart/form-data; boundaryABCD);然后将每个字段用“--分隔符”分隔最后一个“--分隔符--”表示结束。例如要上传一个title字段Today和一个文件C:\1.txtHTTP正文如下--ABCDContent-Disposition: form-data; nametitle\r\nToday--ABCDContent-Disposition: form-data; name1.txt; filenameC:\1.txtContent-Type: text/plain\r\n--ABCD--\r\n请注意每一行都必须以\r\n结束包括最后一行。如果用Sniffer程序检测IE发送的POST请求可以发现IE的分隔符类似于 ---------------------------7d4a6d158c9这是IE产生的一个随机数目的是防止上传文件中出现分隔符导致服务器无法正确识别文件起始位置。我们可以写一个固定的分隔符只要足够复杂即可。发送文件的POST代码如下String[] props ... // 字段名String[] values ... // 字段值byte[] file ... // 文件内容String BOUNDARY ---------------------------7d4a6d158c9; // 分隔符StringBuffer sb new StringBuffer();// 发送每个字段:for(int i0; isb sb.append(--);sb sb.append(BOUNDARY);sb sb.append(\r\n);sb sb.append(Content-Disposition: form-data; name\ props[i] \\r\n\r\n);sb sb.append(URLEncoder.encode(values[i]));sb sb.append(\r\n);}// 发送文件:sb sb.append(--);sb sb.append(BOUNDARY);sb sb.append(\r\n);sb sb.append(Content-Disposition: form-data; name\1\; filename\1.txt\\r\n);sb sb.append(Content-Type: application/octet-stream\r\n\r\n);byte[] data sb.toString().getBytes();byte[] end_data (\r\n-- BOUNDARY --\r\n).getBytes();// 设置HTTP头:hc.setRequestProperty(Content-Type, MULTIPART_FORM_DATA ; boundary BOUNDARY);hc.setRequestProperty(Content-Length, String.valueOf(data.length file.length end_data.length));// 输出:output hc.openOutputStream();output.write(data);output.write(file);output.write(end_data);// 读取服务器响应// TODO...