Android AsyncHttpClient下载包含Content-Type:unkonwn标头的图像文件

时间:2015-03-06 08:46:53

标签: android http http-headers content-type content-disposition

我正在使用http://loopj.com/android-async-http/中的AsyncHttpClient库,让它可以调用Web服务来检索JSON响应。我现在正试图调用一个Web服务,通​​过HTTP将文件流回客户端。因此我使用BinaryHttpResponseHandler来捕获返回的byte []数据。我正在使用的代码:

public static void getImage(Context context, String url, final ImageLoadingListener listener) {
    boolean online = isOnline(context);
    client = new AsyncHttpClient();
    if (online) {
        String[] allowedContentTypes = new String[]{"image/png", "image/jpeg"};
        client.getHttpClient().getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true);
        client.get(Html.fromHtml(url).toString(), new BinaryHttpResponseHandler(allowedContentTypes) {
            @Override
            public void onSuccess(int i, Header[] headers, byte[] bytes) {
                Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
                listener.imageReceived(bmp);
            }

            @Override
            public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {
                printRequestResult(i, headers);
            }
        });
    }
}

但是当我尝试下载带有标题Content-Type的图像文件时:设置为“unknown”它失败了,当检查Throwable对象时,异常是'org.apache.http.client.HttpResponseException:不允许Content-Type ! ”。

我尝试下载的图片是:http://media.zenfs.com/en_us/News/Engadget/opHNMlIEDUj72LqIRjgU66Z9ddGI6_GjULpJJpg0iuQSUUUNT-wpyKA5LlWCaHw09N_KlKFNU55j81P6QLhOYwScbeX0ABeo_SL1cmNn4KEHqfL8of0dGpp1h9_2ZbgkT1PYJGuil5bt2uyYbpyXYDdCcCtFmm9Vdmvnd93dEwVY9DygmaXajJcYNj1vwPg-fbQaTqFe6Dv5GKmTm-PRaJNTzFzfOTzLDRYvDH1nQEk

如果它在浏览器中正确显示,有没有办法使用AsyncHttpClient库下载它?

1 个答案:

答案 0 :(得分:0)

我设法通过指定:

来进行内容类型检查
String[] allowedContentTypes = new String[]{".*"};

我想这不是最好的解决方案,因为它只是内容类型检查,但这是我能想到的最好的