最近写了一个小demo,调用淘宝的api,来完成一个添加/更新销售属性图片的功能,程序的流程如下图所示:
![]()
![]()

程序要做的是,把接收到的数据组装成参数传递给淘宝的服务器。
一、在模拟post请求之前,先看一下,客户端发送过来的内容
客户端jsp页面中内容如下:

代码:
<form action="operation/updateImgServlet" id="updateImgForm" name="updateImgForm" method="post" enctype="multipart/form-data" >
<input type="hidden" name="properties" value="<%=properties%>"/>
<input type="hidden" name="id" value="<%=id %>"/>
<input type="hidden" name="iid" value="<%=iid %>"/>
颜色别名:<input type="text" name="nameAlias" id="nameAlias"></input>
上传图片:<input type="file" name="imgPath" id="imgPath"></input>
<input type="submit" name="updateImg" id="updateImg" value="提交" />
</form>
上传文件后,可以得到post请求,内容如下:

注意:1、在绿框中是,图片的二进制内容,省略了很多
2、第一个黄框中的内容,指定了发送内容的类型和分隔符
3、第二个黄框表明发送的内容是图片
4、最重要的是,上面的格式必须一字不差,包括最后的回车
二、下面来模拟post请求
使用java.net.HttpURLConnection来建立连接
1、组装需要发送的内容
代码如下:
//按照HTTP的协议内容标准格式发送信息
String BOUNDARY = "---------------------------198152288819156"; // 分隔符
StringBuffer sb = new StringBuffer();
// 发送每个字段:
for (Iterator<Map.Entry<String, String>> it = apiparamsMap.entrySet().iterator(); it.hasNext();) {
Map.Entry<String, String> e = it.next();
sb = sb.append("--");
sb = sb.append(BOUNDARY);
sb = sb.append("\r\n");
sb = sb.append("Content-Disposition: form-data; name=\""+ e.getKey() + "\"\r\n\r\n");
sb = sb.append(e.getValue());
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=\""+name+"\"; filename=\""+path+"\"\r\n");
sb = sb.append("Content-Type: Content-Type: image/jpeg\r\n\r\n");
byte[] data = sb.toString().getBytes();
byte[] end_data = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
2、建立连接,发送请求内容
代码如下:
URL url = null;
HttpURLConnection connection = null;
//建立连接
url = new URL(DemoConstant.SANDBOX_URL);
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary="+BOUNDARY);
connection.setRequestProperty("Content-Length", String.valueOf(data.length + file.length + end_data.length));
connection.setUseCaches(false);
connection.connect();
//发送参数
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.write(data);
out.write(file);
out.write(end_data);
out.flush();
out.close();
注意:
1、设置Content-Type为multipart/form-data;boundary=---------------------------198152288819156
2、file为待上传的图片二进制内容
3、发送顺序发送参数
4、如果你的参数中是带有中文字符的,请注意输出的字符集编码,如果使用的都是utf-8的编码格式,则在输出时,将内容转化成utf-8,再输出,如out.write(content.getBytes("utf-8"));
3、获得结果
代码如下:
BufferedReader reader = new BufferedReader(new InputStreamReader(connection
.getInputStream(), "utf-8"));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
reader.close();
return buffer.toString();
buffer.toString即使返回的结果,对其可以进行其他处理工作。

- 大小: 9.7 KB

- 大小: 1.9 KB

- 大小: 31.8 KB
分享到:
相关推荐
在提供的压缩包文件"C#_multipartform_data示例"中,可能包含了这样的示例代码,我们可以从中学习如何在C#环境中实现文件上传或其他多部分数据传输。 通过理解以上知识点和查看示例代码,我们可以深入理解`...
在本主题中,我们将深入探讨如何使用C#来模拟POST请求,以便发送JSON和multipart/form-data格式的数据。这两种数据格式在现代网络应用中非常常见,特别是用于API交互和文件上传。 首先,让我们了解JSON(JavaScript...
在Web开发中,文件上传是一项常见的功能,而`multipart/form-data`是一种HTTP协议中用于处理表单数据,尤其是包含文件上传的表单数据的编码方式。这篇博客文章可能探讨了如何利用这种编码类型来实现文件上传,并且...
总结来说,C#提供了强大的工具来处理`multipart/form-data`和JSON数据的POST请求。无论是上传文件、发送复杂的业务数据还是两者结合,都可以通过`HttpClient`和相关辅助类轻松完成。在实际开发中,要根据具体需求...
在探讨“解决当FORM的ENCTYPE='multipart/form-data'时request.getParameter()获取不到值的方法”这一主题时,我们首先需要理解为什么在特定情况下,传统的`request.getParameter()`方法无法正常工作,以及如何通过...
首先,`multipart/form-data`是HTTP协议中用于表单提交的一种编码类型,尤其适用于上传文件。在这样的请求中,数据被分割成多个部分,每个部分都有自己的头部信息和内容。这种格式允许我们在同一请求中发送文本数据...
使用c#实现的HttpClient拼接multipart/form-data形式参数post提交数据,包含图片内容,有需要的可以下载,希望能帮到有需要的人,
`multipart/form-data`是用于处理包含二进制数据(如文件)的表单提交的编码类型,但它默认情况下不支持传递额外的文本参数。 在描述中提到了使用Apache Commons IO和Commons Fileupload这两个Java库来解决这个问题...
在Java Web开发中,我们经常遇到表单提交数据的情况,特别是涉及到文件上传时,`<form>`标签的`ENCTYPE`属性通常会被设置为`multipart/form-data`。这是因为`multipart/form-data`允许在请求中携带二进制数据,如...
`multipart/form-data`是HTTP协议中一种用于上传文件或发送复杂数据(如带有文件的表单数据)的Content-Type。在C#中,我们可以使用HttpClient类来构造并发送这样的POST请求。首先,需要创建一个...
用C语言实现multipart/form-data文件上传,没有用到curl之类的库。之前做个小的日志上传程序写的。
"multipart/form-data" 是一种HTTP协议中的数据编码方式,主要用于在表单提交时上传文件,如图片或视频。本教程将深入讲解如何利用 Indy 10 库中的 `TIdHTTP` 控件来实现这一功能。 首先,你需要确保已经安装了Indy...
首先,需要创建一个HttpWebRequest对象,并设置其Method属性为“POST”,ContentType属性为“multipart/form-data”。然后,使用StringBuilder类来构建请求的主体部分,包括边界、文件参数和键值对参数。最后,使用...
在Android平台上,实现图片上传通常涉及使用HTTP协议中的multipart/form-data请求类型,这是处理表单数据,特别是上传文件的标准方式。multipart/form-data允许我们在请求体中包含多个部分,每个部分可以是不同的...
### multipart/form-data 参数传递 在Web开发中,`multipart/form-data`是一种用于发送表单...此外,通过使用`multipart/form-data`编码类型,确保了文件数据能够在HTTP请求中被正确地传输到服务器端进行进一步处理。
// 检查请求是否为multipart/form-data类型 if (!ServletFileUpload.isMultipartContent(request)) { return; // 如果不是,则退出 } // 设置文件上传的工厂 DiskFileItemFactory factory = new ...
Uploads a stream using a multipart/form-data POST. HttpWebRequest 提交图片、资源。。。的完整代码
在`multipart/form-data`中,数据被分割成多个部分,每个部分都有自己的边界标识符,以防止数据混淆。攻击者可能利用这个特性构造恶意的请求,导致服务器在解析这些请求时消耗大量资源,从而引发DoS攻击。这种攻击...
本文将详细介绍如何使用Python的requests库处理multipart/form-data类型的请求。 首先,multipart/form-data通常用于POST请求,特别是当需要提交二进制数据,如图片、文档等文件时。在HTTP请求中,它会将数据分割成...
在Web开发中,当涉及到通过HTTP协议向服务器发送POST请求时,我们经常需要选择不同的数据编码类型,主要是`application/x-www-form-urlencoded`和`multipart/form-data`。这两种编码方式各有其适用场景,主要取决于...