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

gavinluo 2014-07-09 06:29:21
//向服务器端上传图片
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

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

------------------分割线-------------------
...全文
638 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liumosan 2016-04-06
  • 打赏
  • 举报
回复
引用 6 楼 jiangyong8023 的回复:
c# 服务器端 怎么接受? 还是不明白,你这个地方 entity.addPart("file", new FileBody(file)); //该怎样接收file文件呢 file的作用是什么?
同问,服务器端怎么接收,
诸葛微笑 2015-04-15
  • 打赏
  • 举报
回复
c# 服务器端 怎么接受? 还是不明白,你这个地方 entity.addPart("file", new FileBody(file)); //该怎样接收file文件呢 file的作用是什么?
xxzjwdnlwx 2015-01-07
  • 打赏
  • 举报
回复
可以将c#服务器接收代码给我一份吗?1991436981@qq.com
xxzjwdnlwx 2015-01-06
  • 打赏
  • 举报
回复
我是的数据上传访问的是,一个C#的.aspx,用了MultipartEntityBuilder上传数据后,所有的参数获取都是空的,没用MultipartEntityBuilder的时候,用context.Request.Params["参数名"]可以取到参数这个是什么原因呢?或是应该怎么取我上传的东西 C#没怎么用过
gavinluo 2014-07-10
  • 打赏
  • 举报
回复
问题已解决,使用MultipartParser 失败了,看了一下截取关键字的正则有问题,用的第一种方法,这里有个帖子,你一起接分吧 http://bbs.csdn.net/topics/390831011
save4me 2014-07-10
  • 打赏
  • 举报
回复
谢谢!很高兴问题解决了
引用 2 楼 gavin_luo 的回复:
问题已解决,使用MultipartParser 失败了,看了一下截取关键字的正则有问题,用的第一种方法,这里有个帖子,你一起接分吧 http://bbs.csdn.net/topics/390831011
save4me 2014-07-09
  • 打赏
  • 举报
回复
参考: Android to WCF: Streaming multi part binary images WCF收到的数据也包括了MIME头。所以WCF收到的长度大于啊Android发送的长度,因为MIME头信息还是有规律的,就是最后"Content-Transfer-Encoding: binary\r\n\r\n",所以解析数据的时候,从这些字符后开始。

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();
}
还有一种是使用MultipartParser 参考: Reading file input from a multipart/form-data POST

public void Upload(Stream stream)
{
    MultipartParser parser = new MultipartParser(stream);
    if (parser.Success)
    {
        // Save the file
        SaveFile(parser.Filename, parser.ContentType, parser.FileContents);
    }
}
使用 WCF 实现 RESTful 方式的 WebService

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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