Android 使用 MultipartEntity ,C# 怎么接受这个参数

gavinluo 2014-07-09 06:27:47
//向服务器端上传图片
public String UploadImage(String url, Map<String, String> param,File file)throws Exception{
String result = "";
HttpPost post = new HttpPost(url);

MultipartEntity entity = new MultipartEntity();
if (param != null && !param.isEmpty()) {
for (Map.Entry<String, String> entry : param.entrySet()) {
if (entry.getValue() != null
&& entry.getValue().trim().length() > 0) {
entity.addPart(entry.getKey(),new StringBody(entry.getValue()));

}
}
}
// 添加文件参数
if (file != null && file.exists()) {
entity.addPart("file", new FileBody(file)); //该怎样接收file文件呢
}
post.setEntity(entity);

HttpClient httpClient = new DefaultHttpClient();
//执行上传
HttpResponse response = httpClient.execute(post);
//StringBuffer sb = new StringBuffer();

if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
result = retrieveInputStream(response.getEntity());
Log.e("ykp","图片上传:" + result);
}

post.abort();
return result;
}

服务器端我用的WCF的RestFul,我用Stream 参数接受到数据后,本以为可以直接写文件,但保存出来的文件根本打不开,随后弄了半天,发现这个流里的总长度和 Android端的总长度不一致,转换成字符串后发现还有下列东西,请问这样的数据C#怎么处理,
------------------分割线-------------------
--OyMEgL2NqrWgkNYReqy33GE8ndpvuyi
Content-Disposition: form-data; name="attachment"; filename="2014_07_09_17_51_41.jpg"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

此处应该是对应图片的乱码

------------------分割线-------------------

...全文
180 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_25093947 2015-09-14
  • 打赏
  • 举报
回复
你好 有DEMO吗 还是不懂
save4me 2014-07-10
  • 打赏
  • 举报
回复
如果不是很复杂,就不需要MultipartParser了,直接跳过头部简单。

internal static byte[] GetBytesFromStream(Stream stream, System.Text.Encoding encoding)
{
	// Read the stream into a byte array
	byte[] data = ToByteArray(stream);
	List<byte> dataList = new List<byte>();

	// Copy to a string for header parsing
	string content = encoding.GetString(data);

	string matchValue = "Content-Transfer-Encoding: binary\r\n\r\n";
	int lastIndex = content.LastIndexOf(matchValue);

	int startingIndex = lastIndex + matchValue.Length;

	byte[] bytes = encoding.GetBytes(content.Substring(0, startingIndex - 1));
	int bytesLength = bytes.Length;

	for (int i = bytesLength + 1; i < data.Length; i++)
	{
		dataList.Add(data[i]);
	}

	return dataList.ToArray();
}

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧