从我的android我试图将带有一类数据的图像发送到IIS Web服务。 (C#)
问题是我得到400 Bad request
。
图像被编码为Base64
。然后将json
与其他类元素放在一起。
我的猜测是Base64在Json中无效。所以服务器不理解它。
如果我将字符串设置为""
,则可以接受帖子。
所以问题是,如何在Base64
数组中使Json
有效?(我尝试过URL.Encode但没有成功)。
或如何将图像从android发送到webservice?
Gson gson = new Gson();
String json = gson.toJson(record); // record has param { String base64Photo }
答案 0 :(得分:1)
图像有多大?我很确定你超过了IIS Json的大小限制(默认值几乎是4 MB)。
检查此http://geekswithblogs.net/frankw/archive/2008/08/05/how-to-configure-maxjsonlength-in-asp.net-ajax-applications.aspx或此http://www.webtrenches.com/post.cfm/iis7-file-upload-size-limits
祝你好运!答案 1 :(得分:1)
我会说实话 - 我从未将图像从Android上传到IIS网络服务,但在其他所有上下文中我总是使用File
。创建文件并将其作为MultipartEntity
上传很容易。另外,您不必一起使用Base64
,这很好,因为它可以节省使用Base64
带来的大约33%的开销增加。
private File createFileFromBm(Bitmap pic){
File f = new File(context.getCacheDir(), "image");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
pic.compress(CompressFormat.JPEG, 100, bos);
byte[] data = bos.toByteArray();
try{
FileOutputStream fos = new FileOutputStream(f);
fos.write(data);
fos.close();
} catch (IOException e){
Log.e(TAG, e.toString());
}
return f;
}
以下是您创建MultipartEntity
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE;
entity.addPart("photo", new FileBody(file, "image/jpeg"));
httpPost.setEntity(entity);
return httpClient.execute(httpPost, responseHandler);
我在这里使用HttpPost
和BasicResponseHandler
从服务器接收JSON
输出进行处理,但您可以随意执行任何操作。