`
fantaxy025025
  • 浏览: 1311313 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

利用Httpclient下载图片,java不用httpClient下载图片

 
阅读更多

=

=

=

from:https://blog.csdn.net/qq_41070393/article/details/106855795

/**
     * 下载图片
     */
    public static void downloadPicture(String url, String localPath) {
        //可关闭的httpclient客户端,相当于你打开一个浏览器
        CloseableHttpClient closeableHttpClient = HttpClients.createDefault();
        //构造httpget请求对象
        HttpGet httpGet = new HttpGet(url);
        //响应
        CloseableHttpResponse response = null;

        FileOutputStream fos = null;
        try {
            response = closeableHttpClient.execute(httpGet);
            //获取响应结果  HttpEntity不仅可以作为结果,也可以作为请求的参数实体,有很多实现
            HttpEntity entity = response.getEntity();

            // image/jpg  image/jpeg  image/png
            String contentType = entity.getContentType().getValue();//特别注意这里要getValue一下,否则这里不是string类型的数据而是reader类型的
            String suffix = ".jpeg";
            if (contentType.contains("jpeg") || contentType.contains("jpg")) {
                suffix = ".jpg";
            } else if (contentType.contains("bmp") || contentType.contains("bitmap")) {
                suffix = ".bmp";
            } else if (contentType.contains("png")) {
                suffix = ".png";
            } else if (contentType.contains("gif")) {
                suffix = ".gif";
            } else {
                OutTool.out("根据response头信息的contentType,图片的后缀没有找到合适的。默认使用jpeg。", url);
            }
            //字节流
            byte[] bytes = EntityUtils.toByteArray(entity);
            //String localpath = "D:\\LDS\\MavenDemoProject\\src\\main\\resources\\" + "我用httpclient的Get方式下载的图片" + suffix;
            String fileName = localPath + suffix;
            fos = new FileOutputStream(fileName);
            fos.write(bytes);

            //确保流关闭
            EntityUtils.consume(entity);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭输出流
            if(fos != null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (closeableHttpClient != null) {
                try {
                    closeableHttpClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (response != null) {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

 

 

 

使用Httpclient下载图片

/**
     * 下载图片
     */
    public static void downloadPicture(String url, String localPath) {
        //可关闭的httpclient客户端,相当于你打开一个浏览器
        CloseableHttpClient closeableHttpClient = HttpClients.createDefault();
        //构造httpget请求对象
        HttpGet httpGet = new HttpGet(url);
        //响应
        CloseableHttpResponse response = null;

        FileOutputStream fos = null;
        try {
            response = closeableHttpClient.execute(httpGet);
            //获取响应结果  HttpEntity不仅可以作为结果,也可以作为请求的参数实体,有很多实现
            HttpEntity entity = response.getEntity();

            // image/jpg  image/jpeg  image/png
            String contentType = entity.getContentType().getValue();//特别注意这里要getValue一下,否则这里不是string类型的数据而是reader类型的
            String suffix = ".jpeg";
            if (contentType.contains("jpeg") || contentType.contains("jpg")) {
                suffix = ".jpg";
            } else if (contentType.contains("bmp") || contentType.contains("bitmap")) {
                suffix = ".bmp";
            } else if (contentType.contains("png")) {
                suffix = ".png";
            } else if (contentType.contains("gif")) {
                suffix = ".gif";
            } else {
                OutTool.out("根据response头信息的contentType,图片的后缀没有找到合适的。默认使用jpeg。", url);
            }
            //字节流
            byte[] bytes = EntityUtils.toByteArray(entity);
            //String localpath = "D:\\LDS\\MavenDemoProject\\src\\main\\resources\\" + "我用httpclient的Get方式下载的图片" + suffix;
            String fileName = localPath + suffix;
            fos = new FileOutputStream(fileName);
            fos.write(bytes);

            //确保流关闭
            EntityUtils.consume(entity);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭输出流
            if(fos != null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (closeableHttpClient != null) {
                try {
                    closeableHttpClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (response != null) {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

 

 

 

 

====文章1====

转载:https://www.iteye.com/blog/mybloglearn-818301
利用HttpClient下载图片
关键字: http
最近在项目中用到了HttpClient类库,有一个需求是下载网站中的图片,但是发现下载的图片不能打开,在网上搜索类似问题,没有找到解决的办法,无奈只得查看HttpClient的源代码,自己解决这个问题了。
在HttpMethodBase中发现如下代码:
java 代码

public String getResponseBodyAsString() throws IOException {  
        byte[] rawdata = null;  
        if (responseAvailable()) {  
            rawdata = getResponseBody();  
        }  
        if (rawdata != null) {  
            return EncodingUtil.getString(rawdata, getResponseCharSet());  
        } else {  
            return null;  
        }  
    }  
其中在返回网络资源的内容时,使用了指定的编码对网页内容或图片内容进行了编码,这样,对于图片来说内容当然不能显示了,所以在获得图片内容时要使用如下的方法:
java 代码

public byte[] getResponseBody() throws IOException   
或  
public InputStream getResponseBodyAsStream() throws IOException  
在把返回的内容存储到文件中,这样就实现了图片的自动下载,下面的代码演示了下载图片的过程

java 代码

import java.io.File;  
import java.io.FileOutputStream;  
import java.io.IOException;  
  
import org.apache.commons.httpclient.HttpClient;  
import org.apache.commons.httpclient.methods.GetMethod;  
  
/** 
* 用HttpClient下载图片 
* @author wei 
*/  
public class TestDownImage {  
      
    public static void main(String[] args) throws IOException{  
        HttpClient client = new HttpClient();  
        GetMethod get = new GetMethod("http://images.sohu.com/uiue/sohu_logo/beijing2008/2008sohu.gif");  
        client.executeMethod(get);  
        File storeFile = new File("c:/2008sohu.gif");  
        FileOutputStream output = new FileOutputStream(storeFile);  
        //得到网络资源的字节数组,并写入文件  
        output.write(get.getResponseBody());  
        output.close();  
    }  
}  

 

 

=

=

=

 

分享到:
评论

相关推荐

    java使用HttpClient通过url下载文件到本地

    在这个特定的场景中,我们利用HttpClient来从指定的URL下载文件到本地。以下是对这个主题的详细阐述: 1. **HttpClient介绍**: HttpClient是一个Java库,支持HTTP/1.1协议以及部分HTTP/2特性。它提供了一组高级...

    JAVA利用HttpClient进行HTTPS接口调用

    接下来,`HttpClientUtil.java`文件可能是实现HttpClient工具类,提供一个静态方法来创建和初始化HttpClient实例。这个方法可能包含以下步骤: 1. 创建一个CloseableHttpClient实例,通常使用HttpClientBuilder构建...

    httpclient和RestfuL风格上传下载文件

    在Java开发中,HTTPClient和RESTful风格的接口被广泛用于实现文件的上传与下载功能。HTTPClient是一个强大的HTTP客户端库,而RESTful是一种轻量级的、基于HTTP协议的软件架构风格,常用于构建Web服务。在分布式系统...

    (完整版)JAVA利用HttpClient进行POST请求(HTTPS).doc

    "JAVA利用HttpClient进行POST请求(HTTPS)" JAVA HttpClient是Apache软件基金会提供的一个开源实现HTTP客户端的Java库,能够帮助开发者轻松地与HTTP服务器进行交互。在实际项目中,我们经常需要使用HttpClient来发送...

    httpclient多线程下载(分段下载)实践

    总之,利用HTTPClient进行多线程分段下载是一种高效的方法,它结合了HTTP协议的特性与Java的多线程处理能力。通过合理的设计和实现,可以显著提升大文件下载的速度和用户体验。在实际编码中,开发者需要关注线程安全...

    java下载图片的几种方式,提供源代码

    下面是如何使用HttpClient下载图片: ```java import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import ...

    通过 HttpClient 下载 文件

    本主题将深入探讨如何利用HttpClient实现文件的下载功能,同时也会涉及相关的源码解析和辅助工具的使用。 首先,HttpClient是一个Java库,它允许开发者以一种与HTTP协议兼容的方式发送请求并接收响应。它提供了丰富...

    httpClient调用wcf

    3. **HttpClient调用**:在Java端,引入HttpClient库及相关依赖(如本例中的`httpclient-4.2.3.jar`等)。使用HttpClient,你可以创建一个`HttpClient`实例,然后构建`HttpGet`或`HttpPost`对象,设置请求URL(对应...

    HttpClient jar包下载

    通过理解并熟练运用以上知识点,你将能够利用HttpClient库有效地进行HTTP通信,无论是简单的GET请求还是复杂的POST请求,甚至是处理HTTPS和管理会话。HttpClient的强大功能使其成为Java开发者在处理HTTP任务时的首选...

    commons-httpclient-3.1 java API详细index格式文档

    《Apache Commons HttpClient 3.1 Java API详解》 Apache Commons HttpClient 3.1 是一个功能强大的Java HTTP客户端库,它提供了全面的HTTP协议支持,包括基本的GET和POST请求、Cookie管理、重定向处理以及HTTPS...

    java实现httpget和httppost请求httpclient-4.3.1.jar包

    利用httpclient-4.3.1.jar、httpcore-4.3.jar包,很简单的用java实现httpget和httppost请求。

    JavaHttpClient

    在电商开发中,利用Java HttpClient可以高效地与其他系统交互,无论是获取商品信息、处理订单,还是进行数据分析,都能提供可靠的网络通信支持。合理使用和配置HttpClient,能够提升系统的稳定性和性能。

    Java网络通信之HttpClient

    在实际开发中,我们常常利用HttpClient与其他服务进行交互,如API调用、数据同步等。 总之,Java中的HttpClient是一个强大且灵活的HTTP客户端工具,它使得网络通信变得更加简单。通过阅读源码和编写测试用例,我们...

    httpclient

    在本文中,我们将深入探讨HttpClient的主要特性和使用方法,以及如何利用它来处理HTTP协议的各种操作。 HttpClient支持多种HTTP方法,如GET、POST、PUT、DELETE等,可以方便地进行HTTP头的设置,发送cookies,处理...

    java_httpclient

    Java HttpClient 是一个强大的 HTTP 客户端库,用于在 Java 应用程序中发送和接收 HTTP 请求。这个工具包在Java社区中广泛使用,尤其是在需要与Web服务进行交互或者进行自动化测试时。在这个场景中,我们关注的是两...

    commons-httpclient-3.0.jar JAVA中使用HttpClient可以用到

    《JAVA中使用HttpClient:commons-httpclient-3.0.jar详解》 在JAVA开发中,进行HTTP请求时,Apache的HttpClient库是一个不可或缺的工具。本文将深入解析`commons-httpclient-3.0.jar`,它是HttpClient的一个重要...

    httpClient需要的jar包

    HttpClient是Apache基金会开发的一个Java库,它为Java程序员提供了一个强大的、灵活的、稳定的、功能丰富的客户端HTTP通信框架。...同时,及时关注Apache HttpClient的更新,以便利用新特性并修复已知问题。

    HttpClient 学习精髓

    ### HttpClient学习精髓 #### 一、简介 ... #### 二、背景与需求 ...对于Java开发者来说,无论是进行Web开发还是构建各种类型的网络服务,都...通过合理利用HttpClient,可以极大地提高网络应用的开发效率和性能表现。

    commons-httpclient.rar

    2. **连接管理**:HttpClient包含一个连接管理器,用于控制到服务器的连接,包括连接池的创建、管理和复用,有助于提高性能和资源利用率。 3. **请求和响应处理**:HttpClient可以设置请求头、参数、编码方式等,并...

Global site tag (gtag.js) - Google Analytics