Java 从android向wcf rest服务发布图像

Java 从android向wcf rest服务发布图像,java,android,post,http-post,Java,Android,Post,Http Post,我在向wcf rest服务发布图像时遇到问题。我发布了一些参数,其中一个是base64 utf-8编码字符串(图像) 我的问题是每次我发帖都会收到“糟糕的请求”。这是密码 public String PostImage(Drawable img) throws Exception { HttpPost httpost = new HttpPost("http://10.0.2.2:1374/uploaditem"); JSONStringer json = JSONString

我在向wcf rest服务发布图像时遇到问题。我发布了一些参数,其中一个是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);
}

这是编码字符串的问题,但是什么呢?

我不明白为什么编码字符串会有问题

首先,尝试删除string对象中的data属性,看看是否会遇到同样的问题。通过这种方式,您可以消除由于编码错误而导致的可能性,并确保正确发出请求

其次,打印正在发送的http消息并进行格式检查。如果您有权访问服务器日志,请记录接收到的消息以及可能详细说明
错误请求的任何详细信息。我原以为如果WCF响应的请求不正确,它会向stderr打印一些东西,所以请先检查现有的日志

编辑

我不认为奇怪字符会有问题,因为base64编码中使用的字符不在ASCi范围之外

您应该检查正在发送的请求的大小。如果图像较大,则会得到一个较大的base64编码字符串,该字符串可能超过服务器post限制


如果您无法访问服务器日志,我认为这会澄清问题,如果是问题,您可以发送一个较小的图像来测试它

嗯。它的工作,如果我删除“数据”键或更改为一些随机文本。所以它和编码有关。我检查了编码字符串,无法使用任何奇怪的字符:/to尝试进行某种登录并运行,以便查看消息。请尝试检查作为web服务器或框架的一部分可用的任何现有日志。我本以为有什么东西被吐出来了。唉,这个要求太长了,为什么我以前没有想过呢?尝试了一个较小的图像,它的工作!我有这种情况,你能给我们看看你的WCF服务接口吗?