将图像发布到Android的wcf rest服务

时间:2012-10-21 14:51:22

标签: java android post http-post

我有问题将图片发布到我的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);
}

这是编码字符串的东西,但是什么?

1 个答案:

答案 0 :(得分:0)

我不明白为什么它应该是编码字符串的问题。

首先,尝试删除字符串对象中的data属性,看看是否遇到同样的问题。这样您就可以消除由编码引起的可能性,并确保您正确地提出请求。

然后打印正在发送的http消息并进行格式化检查。如果您有权访问服务器,请记录正在接收的消息以及可能在Bad Request上详细说明的任何详细信息。我原以为WCF会在stderr上打印一些东西,如果它响应了一个错误的请求,那么试试先检查现有的日志。

修改

我不认为奇怪的字符会出现问题,因为base64编码中使用的字符不会超出ASCi范围。

您应该检查发送请求的大小。如果您的图像很大,您将获得一个很大的base64编码字符串,可能超出服务器发布限制。

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