1

イメージを WCF サービスにアップロードできる Android プログラムがあります。WCF サービスは、イメージ名、フォルダー名、およびイメージの base64 エンコードを含む JSON オブジェクトを受け入れます。

そのサービスをテストするためにフィドラーを使用します。オンライン サービスから画像をエンコードし、オブジェクトに入れました。次に、POST リクエストを作成しました。次に、WCF サービスが画像を正常にアップロードしました。

しかし、Android HTTP クライアントを使用して同じことを行うと、WCF は要求を受け入れますが、画像を認識しません。

ここに私のAndroidコードがあります:

try {
    HttpPost httpPost=new HttpPost(this.remoteBasePath);
    JSONObject obj = new JSONObject();
    obj.put(FILE_NAME, fileName);
    obj.put(FILE_STREAM,fileStream);
    obj.put(FOLDER_NAME, remoteFolder);
    httpPost.setHeader("Content-type", "application/json; charset=utf-8");
    httpPost.setEntity(new StringEntity(obj.toString()));
    httpPost.setHeader(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
    httpResponse=httpClient.execute(httpPost);
    if(httpResponse!=null){
        TLLog.d(TAG,"StatusCode : "+ httpResponse.getStatusLine().getStatusCode());
        if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {                               
            InputStream instream = httpResponse.getEntity().getContent();
            BufferedReader r = new BufferedReader(
            new InputStreamReader(instream));
            StringBuilder total = new StringBuilder();
            String line;
            while ((line = r.readLine()) != null) {
                total.append(line);
            }
            instream.close();
            String result = total.toString();
            TLLog.d(TAG,"Image posting result : "+ result);
            return true;
        }
    }
} catch (ClientProtocolException e) {
    TLLog.e(TAG, e.getStackTrace().toString());
} catch (IOException e) {
    TLLog.e(TAG, e.getStackTrace().toString());
} catch (JSONException e) {
    e.printStackTrace();
}

問題がわかりません。

4

1 に答える 1

0

こんにちは皆さん、ようやく問題がわかりました。問題はエンコードであるため、インターネットからダウンロードしたクラスBase64.javaを使用します。エンコードには次の方法を使用します

public static String encodeTobase64(Bitmap image) throws IOException
{
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();  
    image.compress(Bitmap.CompressFormat.JPEG, 50, outputStream);
    byte[] bs = outputStream.toByteArray();
    String imageEncoded=Base64.encodeBytes(bs);
    return imageEncoded;
}

戻り値をファイルストリームとして使用します。だから私の問題は解決しました。

于 2013-03-03T14:49:56.940 に答える