Java下http下载文件客户端和上传文件客户端实例代码

让我为您详细讲解Java下http下载文件客户端和上传文件客户端实例代码的完整攻略。

一、http下载文件客户端代码示例

1.1 通过Java SE自带库实现

使用Java SE自带库实现简单的http下载文件客户端代码,只需要用到Java SE自带的URL和HttpURLConnection两个类即可。

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpDownloadClient {
    public static void downloadFile(String downloadUrl, String savePath) throws IOException {
        URL url = new URL(downloadUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setConnectTimeout(5000); // 设置连接超时时间为5秒
        conn.setRequestMethod("GET"); // 设置请求方法为GET
        BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(savePath));
        byte[] buffer = new byte[1024];
        int len;
        while ((len = bis.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        bis.close();
        bos.close();
        conn.disconnect();
    }
}

在使用该代码的时候,只需要调用downloadFile方法,传入文件下载链接和保存路径即可。比如下载百度的logo,保存在本地的D:/filename.png,示例如下:

public static void main(String[] args) {
    try {
        String downloadUrl = "http://www.baidu.com/img/bd_logo1.png";
        String savePath = "D:/filename.png";
        HttpDownloadClient.downloadFile(downloadUrl, savePath);
        System.out.println("Download successed!");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

1.2 使用Apache的HttpClient库实现

由于Java自带的库比较简单,一些高级的操作都没有提供接口或者比较薄弱,因此,Apache曾经开发了一个类库——HttpClient,该类库提供了很多比Java SE自带库强的特性,如连接池、多线程、身份验证、重定向、Cookie自动管理等。使用HttpClient下载文件非常简单,只需调用实例中的execute方法即可。

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpDownloadClient {
    public static void downloadFile(String downloadUrl, String savePath) throws Exception {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        URIBuilder uriBuilder = new URIBuilder(downloadUrl);
        HttpGet httpGet = new HttpGet(uriBuilder.build());
        HttpResponse response = httpClient.execute(httpGet);
        HttpEntity entity = response.getEntity();
        InputStream inputStream = entity.getContent();
        FileOutputStream fileOutputStream = new FileOutputStream(savePath);
        byte[] buffer = new byte[1024];
        int len;
        while ((len = inputStream.read(buffer)) != -1) {
            fileOutputStream.write(buffer, 0, len);
        }
        fileOutputStream.close();
        inputStream.close();
        EntityUtils.consume(entity);
        httpClient.close();
    }
}

下载方法的使用方式和之前的Java SE自带库示例是一致的,只需调用downloadFile方法传入文件下载链接和保存路径即可。

二、http上传文件客户端代码示例

2.1 使用Java SE自带库实现

使用Java SE自带库实现简单的http上传文件客户端代码,同样只需要用到Java SE自带的URL和HttpURLConnection两个类即可。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUploadClient {
    public static void uploadFile(String uploadUrl, String filePath) throws IOException {
        File file = new File(filePath);
        HttpURLConnection conn = (HttpURLConnection) new URL(uploadUrl).openConnection();
        conn.setDoOutput(true); // 设置为POST请求
        conn.setRequestMethod("POST"); // 设置请求方法为POST
        OutputStream os = conn.getOutputStream();
        FileInputStream fis = new FileInputStream(file);
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) != -1) {
            os.write(buffer, 0, len);
        }
        fis.close();
        os.close();
        int respCode = conn.getResponseCode(); // 获取响应码
        if (respCode == HttpURLConnection.HTTP_OK) {
            System.out.println("Upload successed!");
        } else {
            System.out.println("Upload failed:" + respCode);
        }
    }
}

在使用该代码的时候,只需要调用uploadFile方法,传入文件上传链接和要上传的文件路径即可。比如上传本地的D:/test.txt文件到一个叫做upload的服务器:

public static void main(String[] args) {
    try {
        String uploadUrl = "http://upload.com/api/upload";
        String filePath = "D:/test.txt";
        HttpUploadClient.uploadFile(uploadUrl, filePath);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

2.2 使用Apache的HttpClient库实现

使用HttpClient库实现上传文件同样很简单,只需构造HttpPost对象,然后设置上传的文件,再调用实例中的execute方法即可。

import java.io.File;
import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpUploadClient {
    public static void uploadFile(String uploadUrl, String filePath) throws Exception {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(uploadUrl);
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        builder.addPart("file", new FileBody(new File(filePath), ContentType.DEFAULT_BINARY));
        HttpEntity httpEntity = builder.build();
        httpPost.setEntity(httpEntity);
        HttpResponse response = httpClient.execute(httpPost);
        HttpEntity entity = response.getEntity();
        String responseMsg = EntityUtils.toString(entity, "UTF-8");
        EntityUtils.consume(entity);
        httpClient.close();        

        int respCode = response.getStatusLine().getStatusCode(); // 获取响应码
        if (respCode == HttpURLConnection.HTTP_OK) {
            System.out.println("Upload successed!");
            System.out.println("Response message: " + responseMsg);
        } else {
            System.out.println("Upload failed:" + respCode);
        }
    }
}

上传方法的使用方式和之前的Java SE自带库示例是一致的,只需调用uploadFile方法传入文件上传链接和要上传的文件路径即可。

以上就是Java下http下载文件客户端和上传文件客户端的完整攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java下http下载文件客户端和上传文件客户端实例代码 - Python技术站

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

相关文章

  • 使用postman进行并发测试

    当需要测试Web应用程序的性能时,使用Postman进行并发测试是一种有效的方法。以下是使用Postman进行并发测试的完攻略: 步骤1:安装Postman 首先,您需要下载并安装Postman。您可以从Postman官方网站(https://.postman.com/downloads/)下载并安装Postman。 步骤2:创建测试集合 在Postman中…

    other 2023年5月6日
    00
  • 详解css加载会造成阻塞吗

    CSS加载可能会阻塞页面的渲染,尤其是在页面有大量CSS文件或者CSS文件大小较大的情况下。这是因为在浏览器下载页面的过程中,遇到CSS文件的时候,浏览器需要先下载并解析该CSS文件,再根据CSS文件修改HTML DOM树和CSSOM树。只有在CSS文件下载和解析完成后,浏览器才会继续下载并解析HTML文件及其他嵌入式文件,最后将页面渲染出来。因此,CSS文…

    other 2023年6月25日
    00
  • 使用SpringBoot2.x配置静态文件缓存

    使用Spring Boot 2.x配置静态文件缓存攻略 在Spring Boot 2.x中,可以通过配置来启用静态文件缓存,以提高应用程序的性能和加载速度。下面是一个详细的攻略,包含了两个示例说明。 步骤1:添加依赖 首先,确保在项目的pom.xml文件中添加以下依赖: <dependency> <groupId>org.spring…

    other 2023年8月3日
    00
  • matlab中函数fscanf

    matlab中函数fscanf 在MATLAB中,我们经常需要处理文本文件中的数据。可以使用MATLAB中的fscanf函数来读取文本文件中的数据。fscanf函数提供了一种灵活的方法来解析文本数据,它可以将数据读入矩阵或向量中。本篇文章将介绍MATLAB中fscanf函数的使用方法。 fscanf函数的基本语法 fscanf函数的语法如下所示: A = f…

    其他 2023年3月29日
    00
  • 详解Linux系统无法上网解决方案

    针对“详解Linux系统无法上网解决方案”的完整攻略,我将分为以下几步来详细讲解: 1. 检查网络连接状态 首先,我们需要检查网络连接状态,确定是否已经连接上了网络。可以在终端中运行以下命令: ping www.baidu.com 如果能够正常 ping 通百度的服务器,就说明网络连接正常。如果无法 ping 通,说明存在网络连接问题,此时需要进一步排查。 …

    other 2023年6月26日
    00
  • Ubuntu系统U盘安装以及降内核

    Ubuntu系统U盘安装以及降内核 这篇文章将会介绍如何使用U盘安装Ubuntu系统以及如何在Ubuntu系统中降低内核版本。 一、Ubuntu系统U盘安装 下载Ubuntu系统的镜像文件,官方网站为https://ubuntu.com/download。选择符合自己电脑硬件的版本进行下载。 准备一个空白的U盘,并插入电脑USB接口。 下载并安装https:…

    其他 2023年3月28日
    00
  • 浅谈tudou土豆网首页图片延迟加载的效果

    下面是关于“浅谈tudou土豆网首页图片延迟加载的效果”的完整攻略: 一、什么是图片延迟加载? 图片延迟加载(也称为“懒加载”)是一种优化网站加载速度的技术,它可以使图片在用户滚动到它们所在的位置时再进行加载,而不是一次性加载所有图片。这样可以减少页面的加载时间和带宽使用,提高用户体验。 二、tudou土豆网首页图片延迟加载的实现方法 tudou土豆网的首页…

    other 2023年6月25日
    00
  • react中context传值和生命周期详解

    我们来详细讲解一下“React中Context传值和生命周期详解”的完整攻略。 1. 什么是Context Context允许我们不必通过逐层传递props,就可以在组件树中共享数据,并在其中任何地方访问该数据。Context 的主要应用场景是在跨多个层级的组件传递数据。 2. 创建Context // 创建一个名为 MyContext 的context c…

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