我有问题将图片发布到我的wcf休息服务。我发布了一些参数,其中一个是base64 utf-8编码的字符串(图像)。
我的问题是每次发帖都会得到“糟糕的请求”。这是代码
public String PostImage(Drawable img) throws Exception
{
HttpPost httpost = new HttpPost("http://10.0.2.2:1374/uploaditem");
JSONStringer json = JSONStringer()
.object()
.key("ipm")
.object()
.key("name").value("test")
.key("description").value("asfa")
.key("categoryid").value(1)
.key("data").value(ConvertImgToBase64Str(img))
.key("imagetype").value(2)
.key("tags").value("test;test")
.endObject()
.endObject();
StringEntity entity = new StringEntity(json.toString());
entity.setContentType("application/json;charset=UTF-8");//text/plain;charset=UTF-8
entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json;charset=UTF-8"));
httpost.setEntity(entity);
return ExcecutePostRequest(httpclient,httpost);
}
//Method to convert the image to base64encoded string
private String ConvertImgToBase64Str(Drawable img) {
Bitmap bitmap = ((BitmapDrawable)img).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bitmapdata = stream.toByteArray();
return Base64.encodeToString(bitmapdata, Base64.URL_SAFE);
}
这是编码字符串的东西,但是什么?
答案 0 :(得分:0)
我不明白为什么它应该是编码字符串的问题。
首先,尝试删除字符串对象中的data属性,看看是否遇到同样的问题。这样您就可以消除由编码引起的可能性,并确保您正确地提出请求。
然后打印正在发送的http消息并进行格式化检查。如果您有权访问服务器,请记录正在接收的消息以及可能在Bad Request
上详细说明的任何详细信息。我原以为WCF会在stderr上打印一些东西,如果它响应了一个错误的请求,那么试试先检查现有的日志。
修改强>
我不认为奇怪的字符会出现问题,因为base64编码中使用的字符不会超出ASCi范围。
您应该检查发送请求的大小。如果您的图像很大,您将获得一个很大的base64编码字符串,可能超出服务器发布限制。
如果您无法访问服务器日志,我认为如果问题可以澄清这一点,您可以通过发送较小的图像来测试它。