- 浏览: 447554 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
尼古拉斯.fwp:
...
HttpClient模拟表单multipart/form-data方式上传文件和参数 -
绿茵好莱坞:
好文,非常不错
HttpClient模拟表单multipart/form-data方式上传文件和参数 -
dotku:
运行 mvn clean install 出现报错信息> ...
可运行war包,命令行启动war包 -
woxiangbo:
多行合并成1行,可用 GROUP_CONCAT 函数
sql 查询结果格式化 -
woxiangbo:
iframe获取父框架的 某个元素的值,直接在iframe的j ...
js 跨 frame操作对象
主要有三个类,亲试成功:
HttpPostEmulator:
import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.Serializable; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; public class HttpPostEmulator { // 每个post参数之间的分隔。随意设定,只要不会和其他的字符串重复即可。 private static final String BOUNDARY = "----------HV2ymHFg03ehbqgZCaKO6jyH"; public String sendHttpPostRequest(String serverUrl, ArrayList<FormFieldKeyValuePair> generalFormFields, ArrayList<UploadFileItem> filesToBeUploaded) throws Exception { // 向服务器发送post请求 URL url = new URL(serverUrl/* "http://127.0.0.1:8080/test/upload" */); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 发送POST请求必须设置如下两行 connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setRequestMethod("POST"); connection.setRequestProperty("Connection", "Keep-Alive"); connection.setRequestProperty("Charset", "UTF-8"); connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); // 头 String boundary = BOUNDARY; // 传输内容 StringBuffer contentBody = new StringBuffer("--" + BOUNDARY); // 尾 String endBoundary = "\r\n--" + boundary + "--\r\n"; OutputStream out = connection.getOutputStream(); // 1. 处理文字形式的POST请求 for (FormFieldKeyValuePair ffkvp : generalFormFields) { contentBody.append("\r\n") .append("Content-Disposition: form-data; name=\"") .append(ffkvp.getKey() + "\"") .append("\r\n") .append("\r\n") .append(ffkvp.getValue()) .append("\r\n") .append("--") .append(boundary); } String boundaryMessage1 = contentBody.toString(); out.write(boundaryMessage1.getBytes("utf-8")); // 2. 处理文件上传 for (UploadFileItem ufi : filesToBeUploaded) { contentBody = new StringBuffer(); contentBody.append("\r\n") .append("Content-Disposition:form-data; name=\"") .append(ufi.getFormFieldName() + "\"; ") // form中field的名称 .append("filename=\"") .append(ufi.getFileName() + "\"") // 上传文件的文件名,包括目录 .append("\r\n") .append("Content-Type:application/octet-stream") .append("\r\n\r\n"); String boundaryMessage2 = contentBody.toString(); out.write(boundaryMessage2.getBytes("utf-8")); // 开始真正向服务器写文件 File file = new File(ufi.getFileName()); DataInputStream dis = new DataInputStream(new FileInputStream(file)); int bytes = 0; byte[] bufferOut = new byte[(int) file.length()]; bytes = dis.read(bufferOut); out.write(bufferOut, 0, bytes); dis.close(); contentBody.append("------------HV2ymHFg03ehbqgZCaKO6jyH"); String boundaryMessage = contentBody.toString(); out.write(boundaryMessage.getBytes("utf-8")); // System.out.println(boundaryMessage); } out.write("------------HV2ymHFg03ehbqgZCaKO6jyH--\r\n" .getBytes("UTF-8")); // 3. 写结尾 out.write(endBoundary.getBytes("utf-8")); out.flush(); out.close(); // 4. 从服务器获得回答的内容 String strLine = ""; String strResponse = ""; InputStream in = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); while ((strLine = reader.readLine()) != null) { strResponse += strLine + "\n"; } // System.out.print(strResponse); return strResponse; } }
FormFieldKeyValuePair:
public class FormFieldKeyValuePair { private static final long serialVersionUID = 1L; // The form field used for receivinguser's input, // such as "username" in "<inputtype="text" name="username"/>" private String key; // The value entered by user in thecorresponding form field, // such as "Patrick" the abovementioned formfield "username" private String value; public FormFieldKeyValuePair(String key, String value) { this.key = key; this.value = value; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
UploadFileItem:
public class UploadFileItem implements Serializable{ private static final long serialVersionUID = 1L; // The form field name in a form used foruploading a file, // such as "upload1" in "<inputtype="file" name="upload1"/>" private String formFieldName; // File name to be uploaded, thefileName contains path, // such as "E:\\some_file.jpg" private String fileName; public UploadFileItem(String formFieldName, String fileName) { this.formFieldName = formFieldName; this.fileName = fileName; } public String getFormFieldName() { return formFieldName; } public void setFormFieldName(String formFieldName) { this.formFieldName = formFieldName; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } }
Test:
public class UploadImage_Test { @Test public void normal() throws Exception { // 设定服务地址 String serverUrl = "http://xxxxxxxxxxxxxxxx";//上传地址 // 设定要上传的普通Form Field及其对应的value ArrayList<FormFieldKeyValuePair> ffkvp = new ArrayList<FormFieldKeyValuePair>(); ffkvp.add(new FormFieldKeyValuePair("phone", "123456789"));//其他参数 String receive1=RandomUtils.getRandomPhone(); String receive2=RandomUtils.getRandomPhone(); ffkvp.add(new FormFieldKeyValuePair("receiver", receive1+"|"+receive2)); ffkvp.add(new FormFieldKeyValuePair("type", "png")); // 设定要上传的文件 ArrayList<UploadFileItem> ufi = new ArrayList<UploadFileItem>(); ufi.add(new UploadFileItem("image", System.getProperty("user.dir")+"/src/test/resources/123.jpg")); HttpPostEmulator hpe = new HttpPostEmulator(); String response = hpe.sendHttpPostRequest(serverUrl, ffkvp, ufi); System.out.println("Responsefrom server is: " + response); //对 imageUrl、thumbnailUrl、shortUrl进行获取,不能返回空 HttpClient httpClient = new HttpClient(); GetMethod getMethod = new GetMethod(imageUrl); if (httpClient.executeMethod(getMethod) != HttpStatus.SC_OK) { Assert.fail("imageUrl 内容不存在."); } } }
评论
4 楼
尼古拉斯.fwp
2018-02-08
3 楼
绿茵好莱坞
2017-11-03
好文,非常不错
2 楼
瓶鱼跃
2013-03-29
用HttpURLConnection 很原始,需要一条一条的内容自己添加,用HttpClient 很多事情已经帮我们封装好了,比较简单。例子很好···
1 楼
woxiangbo
2012-12-21
后来用 HttpClient 发现巨简单,代码如下:
import java.io.BufferedReader; import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.Charset; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.DefaultHttpClient; public class Test { public static void main(String args[]) throws Exception { MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,"----------ThIs_Is_tHe_bouNdaRY_$", Charset.defaultCharset()); multipartEntity.addPart("phone",new StringBody("136********", Charset.forName("UTF-8"))); multipartEntity.addPart("receiver",new StringBody("138***********",Charset.forName("UTF-8"))); multipartEntity.addPart("image",new FileBody(new File(System.getProperty("user.dir")+"/src/test/resources/123.jpg"),"image/png")); HttpPost request = new HttpPost("http://xxxxx.do"); request.setEntity(multipartEntity); request.addHeader("Content-Type","multipart/form-data; boundary=----------ThIs_Is_tHe_bouNdaRY_$"); DefaultHttpClient httpClient = new DefaultHttpClient(); HttpResponse response =httpClient.execute(request); InputStream is = response.getEntity().getContent(); BufferedReader in = new BufferedReader(new InputStreamReader(is)); StringBuffer buffer = new StringBuffer(); String line = ""; while ((line = in.readLine()) != null) { buffer.append(line); } System.out.println("发送消息收到的返回:"+buffer.toString()); } }
发表评论
-
table_space
2017-04-13 16:56 0SELECT TABLESPACE, MEG ... -
Asset Holdings And Valuation Report 43_example_sql.sql
2016-12-14 15:59 0SELECT securityParAmount.*, ... -
Java垃圾回收机制
2016-01-07 13:37 869Java垃圾回收机制 ... -
swfuplaod 结合common-fileupload servlet 上传文件
2013-08-20 13:35 1181其实 swfupload 就是一个前端上传控件,和后端没什 ... -
java写文件的时候内存溢出
2013-07-24 10:30 7973解决步骤: 1、设置tomcat的jvm参数: 在tom ... -
生成指定位数的随机字符串和数字
2013-01-07 14:37 1523import java.util.Random; ... -
CountDownLatch
2012-12-29 13:22 885有时候会碰到这样一种场景,线程A(主线程)需要等待另外一个线程 ... -
通过Httpclient上传文件
2012-12-26 10:07 1717import java.io.File; import ... -
eclipse老版本下载
2011-04-07 20:12 1378http://archive.eclipse.org/ecli ... -
JSP读取文件
2010-12-21 21:27 1847想在Jsp中读取一个文本文件非常简单,请看下面的例子: St ... -
JAVA拷贝文件
2010-12-18 18:46 1416public static void CreateDBFil ... -
SQL执行顺序
2010-12-06 09:44 14061、from子句组装来自不同数据源的数据; 2、where子句 ... -
去除List列表中重复值(3种解决方法)
2010-12-03 11:35 2281public static void main(String[ ... -
ubuntu 10.0.4 安装 JDK
2010-10-15 15:48 1652在网上搜的一些信息,安装JDK的方法都过时了 从官网下的JDK ... -
FileInputStream的路径问题
2010-09-21 10:19 3893FileInputstream 要想在JAVA里不写死路径,有 ... -
利用commons-fileupload上传文件
2010-08-09 17:25 1493前端JSp页面: <%@ page language= ... -
JSTL循环
2010-08-06 14:58 1176<c:forEach items="${Roi ... -
MyEclipse8.x无法安装FB4插件的朋友请进
2010-07-14 11:34 2744MyEclipse8.x无法安装FB插件的朋友请进 由于MyE ... -
oracle 存储精确时间 年月日 时分秒的一点个人心得
2010-07-02 16:09 8639我用的是ibatis框架 为了做一个聊天功能,发现不能显示最 ... -
windows7声卡驱动修复压缩包
2010-03-23 17:54 8030找来一个很有用的声卡驱动解决方案,是我尝试了n次(不下20)还 ...
相关推荐
在提供的压缩包文件"C#_multipartform_data示例"中,可能包含了这样的示例代码,我们可以从中学习如何在C#环境中实现文件上传或其他多部分数据传输。 通过理解以上知识点和查看示例代码,我们可以深入理解`...
使用c#实现的HttpClient拼接multipart/form-data形式参数post提交数据,包含图片内容,有需要的可以下载,希望能帮到有需要的人,
对于multipart/form-data,这是一种用于HTML表单提交和文件上传的标准。它允许在同一个请求中发送多个部分,每部分都有自己的边界。在C#中,使用HttpClient类可以方便地模拟POST请求,尤其是处理multipart/form-data...
在处理含有文件上传的`multipart/form-data`编码的表单时,使用`request.getParameter()`方法将不再适用,因为它们不能正确解析多部分数据流。相反,引入Apache Commons FileUpload库提供了强大的功能,不仅能够解析...
当我们需要上传文件或同时发送键值对(包括复杂的数据结构如JSON)时,通常会使用`multipart/form-data`和JSON这两种数据格式。下面我们将深入探讨如何在C#中实现这两种数据格式的POST请求。 一、`multipart/form-...
在实际项目中,这样的应用可能会用到上述的`multipart/form-data`(用于上传文件)和JSON(用于传递用户信息或文件元数据)技术。 总的来说,理解和熟练运用`multipart/form-data`和JSON数据格式在C#中的处理,对于...
在Java开发中,时常需要将一些数据以表单形式上传到服务器,比如使用`multipart/form-data`编码类型。表单数据通常由一些文本字段和文件字段组成,而当我们想将Java中的`Map`对象转换为这种格式时,就需要进行一系列...
ASP.NET WebApi MultipartDataMediaFormatter 这是编码为multipart / form-data的自定义类型(包括文件)的自动绑定操作参数的解决方案。 它的工作方式类似于ASP.NET MVC绑定。 此媒体类型格式化程序也可以用于发送...
`multipart/form-data`是HTML表单提交的一种编码方式,特别适合处理文件上传。当用户在表单中选择文件并提交时,浏览器会将文件内容分割成多个部分,并为每个部分添加边界标识,以便服务器可以正确解析这些数据。每...
在某些情况下,接口可能需要我们同时上传文件和额外的参数,这通常涉及到Multipart/form-data编码类型。这种编码方式允许我们在一个请求中混合文件和键值对数据,是HTML表单提交文件时的标准。 在C#中,我们可以...
在Android的HttpClient实现中,不能使用Multipart实现多附件上传的功能。这里,实现了一个自定义的Multipart,用它可实现多附件上传。同时给出了Android端和服务端的例子代码。
Java 模拟发送 Form-Data 的请求方式 Java 模拟发送 Form-Data 的请求方式是指在 Java 语言中模拟浏览器发送 Form-Data 格式的 HTTP 请求的方法。Form-Data 是一种常见的 HTTP 请求体格式,广泛应用于文件上传、...
这个过程通常涉及到表单提交、Multipart/form-data编码、HttpClient或者HttpURLConnection类的使用。下面将详细探讨这些知识点。 1. **HTTP POST请求**:在HTTP协议中,文件上传通常使用POST方法,因为GET方法不...
总的来说,HttpClient提供了一个强大且灵活的API,使得在Java环境中模拟表单上传文件变得容易。它支持多种HTTP方法,可以处理复杂的HTTP头和实体,是进行HTTP通信的理想选择。通过理解multipart/form-data编码和...
在Java编程中,上传文件到服务器是一个常见的任务,特别是在Web应用程序和云计算环境中。这个过程涉及到客户端(通常是用户设备上的应用程序)将本地文件传输到服务器端(例如,Web服务器或存储服务)。以下是一些...
在微信支付接口文档也说明了,需要使用 multipart/form-data 的方式发送请求。.NET 提供了 MultipartFormDataContent 类型,帮助我们构建表单请求,故有以下代码: var form = new MultipartFormDataContent() { {...
在HTTP中,文件上传通常使用POST方法,通过表单数据或者Multipart/form-data编码来发送。这种编码方式允许我们同时发送文本数据和二进制文件,是HTTP文件上传的标准。 在Java中,我们可以使用多种库来实现HTTP文件...
Apache HttpClient是一个强大的HTTP客户端API,而HttpMime则提供了处理MIME类型数据的能力,特别是在发送和接收multipart/form-data类型请求时非常有用。 1. **Apache HttpClient**: HttpClient是一个Java库,它...
在Android开发中,当涉及到与服务器进行数据交互,特别是上传文件时,如用户注册时上传头像,我们通常会遇到一个问题:内置的`HttpURLConnection`或`HttpClient`并不直接支持表单格式的文件上传。因此,我们需要采取...