2

wcfRESTサービスに画像を投稿するのに問題があります。そのうちの1つがbase64utf-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が不正なリクエストで応答している場合、stderrに何かを出力すると思っていたので、最初に既存のログを確認してみてください。

編集

base64エンコーディングで使用される文字はASCiの範囲外ではないため、奇妙な文字に問題はないと思います。

送信されるリクエストのサイズを確認する必要があります。画像が大きい場合は、サーバーの投稿制限を超える可能性のある、base64でエンコードされた大きな文字列を取得します。

サーバーログにアクセスできない場合は、問題があればこれを明確にできると思います。小さい画像を送信してテストできます。

于 2012-10-21T15:03:22.983 に答える