2

我在将图像发布到我的 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);
}

它与编码字符串有关,但是什么?

4

1 回答 1

0

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

首先,尝试删除字符串对象中的数据属性,看看是否会遇到同样的问题。通过这种方式,您可以消除由编码引起的可能性,并确保您正确地发出请求。

其次打印正在发送的http消息并对其进行格式检查。如果您有权访问服务器,请记录收到的消息以及可能详细说明的任何详细信息Bad Request。如果 WCF 响应错误请求,我会认为 WCF 会向 stderr 打印一些内容,因此请先尝试检查现有日志。

编辑

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

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

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

于 2012-10-21T15:03:22.983 回答