使用HttpClient实现文件的上传下载方法

yizhihongxing

下面我将详细讲解使用HttpClient实现文件上传下载方法的完整攻略。

一、引入HttpClient依赖

  1. 在maven中添加HttpClient依赖
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.11</version>
</dependency>
  1. 下载HttpClient的jar包,加入项目依赖中。

二、文件上传

  1. 创建HttpClient
CloseableHttpClient httpClient = HttpClients.createDefault();
  1. 创建Post请求
HttpPost httpPost = new HttpPost(url);
  1. 创建MultipartEntityBuilder对象
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
  1. 设置参数和文件
builder.setCharset(Charset.defaultCharset());
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addBinaryBody("file", file);
builder.addTextBody("params", params);
  1. 构建HttpEntity对象
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
  1. 执行请求
CloseableHttpResponse response = httpClient.execute(httpPost);

完整示例代码:

    public static void uploadFile(String url, File file, String params) throws IOException {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);

        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        builder.setCharset(Charset.defaultCharset());
        builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        builder.addBinaryBody("file", file);
        builder.addTextBody("params", params);

        HttpEntity entity = builder.build();
        httpPost.setEntity(entity);

        CloseableHttpResponse response = httpClient.execute(httpPost);

        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            System.out.println("上传成功");
        } else {
            System.out.println("上传失败");
        }

        response.close();
        httpClient.close();
    }

三、文件下载

  1. 创建HttpClient
CloseableHttpClient httpClient = HttpClients.createDefault();
  1. 创建HttpGet请求
HttpGet httpGet = new HttpGet(url);
  1. 执行请求
CloseableHttpResponse response = httpClient.execute(httpGet);
  1. 读取response的数据
InputStream inputStream = response.getEntity().getContent();
byte[] bytes = new byte[1024];
int len;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
while ((len = inputStream.read(bytes)) != -1) {
    byteArrayOutputStream.write(bytes, 0, len);
}
byte[] data = byteArrayOutputStream.toByteArray();
  1. 将数据写入文件
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(data);
fileOutputStream.flush();
fileOutputStream.close();

完整示例代码:

    public static void downloadFile(String url, File file) throws IOException {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpGet httpGet = new HttpGet(url);

        CloseableHttpResponse response = httpClient.execute(httpGet);
        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            InputStream inputStream = response.getEntity().getContent();
            byte[] bytes = new byte[1024];
            int len;
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            while ((len = inputStream.read(bytes)) != -1) {
                byteArrayOutputStream.write(bytes, 0, len);
            }
            byte[] data = byteArrayOutputStream.toByteArray();
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            fileOutputStream.write(data);
            fileOutputStream.flush();
            fileOutputStream.close();
        }

        response.close();
        httpClient.close();
    }

至此,使用HttpClient实现文件的上传下载方法的攻略讲解结束。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用HttpClient实现文件的上传下载方法 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • java生产1-100的随机数简单实例(分享)

    在Java中,可以使用Random类生成随机数。Random类提供了许多方法来生成不同类型的随机数,包括整数、浮点数和布尔值。本文将提供一关于如何在Java中生成1-100的随机数的详细说明,包括如何使用Random类和示例代码。 步骤1:导入Random类 要在Java中使用Random类,需要在代码导入Random类。使用以下代码行导入Random类: …

    other 2023年5月9日
    00
  • quartzcron表达式:立即开始每10分钟运行一次作业

    以下是关于“quartzcron表达式:立即开始每10分钟运行一次作业”的完整攻略,包含两个示例。 Quartz Cron表达式 Quartz Cron表达式是一种用于调度作业的时间表达。它可以指定作业在何时运行,例如每天的特定时间、每周的特定日期、每月的特定日期等。Quartz Cron表达式由6个字段组成,分别秒、分、时、日、月和周几。以下是Quartz…

    other 2023年5月9日
    00
  • CAD图纸中怎么添加标注的前后缀?

    在CAD图纸中添加标注的前后缀可以通过以下步骤完成: 打开CAD软件并加载需要添加标注的图纸。 选择适当的标注工具,例如“标注”或“注释”工具。 在图纸上选择需要添加标注的对象或位置。这可以是线段、圆、多边形或其他几何形状。 在标注工具栏中找到“前缀”和“后缀”选项。这些选项通常以文本框的形式出现。 在“前缀”文本框中输入您想要添加的前缀内容。例如,您可以输…

    other 2023年8月5日
    00
  • jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较

    为了在页面加载时添加加载中效果,我们可以使用jQuery Mobile提供的”loading”插件。该插件会在页面上显示一个加载中的图标动画,直到页面的所有资源(包括外部CSS和JavaScript文件)加载完成,然后再隐藏加载中的图标。在使用该插件时,需要注意jQuery Mobile的生命周期事件顺序。 jQuery Mobile的生命周期事件顺序是: …

    other 2023年6月25日
    00
  • 华为路由AX3怎么重启? 华为路由AX3定时重启的技巧

    针对华为路由AX3的重启和定时重启操作,可以参考以下攻略: 华为路由AX3重启操作 方法一:通过路由管理页面进行重启 打开浏览器,输入网关地址(默认为:192.168.3.1)。 输入登录账号和密码,进入路由器的管理页面。 点击“重启”选项,弹出“确认重启”提示框。 点击“确定”,等待路由器自动重启即可。 方法二:通过硬件按钮进行重启 在华为路由AX3背面,…

    other 2023年6月26日
    00
  • EditText限制输入数字,精确到小数点后1位的设置方法

    当你想要限制用户在EditText中输入数字,并且要求精确到小数点后一位时,你可以按照以下步骤进行设置: 首先,在你的布局文件中,添加一个EditText组件: <EditText android:id=\"@+id/editText\" android:layout_width=\"match_parent\"…

    other 2023年9月5日
    00
  • 详解Java中使用externds关键字继承类的用法

    详解Java中使用extends关键字继承类的用法 在Java中,我们可以使用extends关键字继承已有的类,这样子就可以在原有类的基础上进行扩展和功能添加。本文将详细讲解extends关键字的用法。 语法规则 在Java中,使用extends关键字继承类的语法规则如下: class SubClass extends SuperClass { // 一些其…

    other 2023年6月26日
    00
  • iOS组件化开发实战记录

    iOS组件化开发实战记录攻略 1. 什么是组件化开发 组件化开发是一种将复杂的iOS应用拆分成多个独立的组件,每个组件都具有独立的功能和界面,可以独立开发、测试和维护的开发模式。通过组件化开发,可以提高代码的复用性、降低耦合度,同时也方便团队协作和项目的扩展。 2. 组件化开发的优势 代码复用性:组件化开发可以将常用的功能模块抽取成独立的组件,可以在不同的项…

    other 2023年7月27日
    00
合作推广
合作推广
分享本页
返回顶部