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下载文件客户端和上传文件客户端的完整攻略,希望能对您有所帮助。

阅读剩余 74%

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

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

相关文章

  • macOS Big Sur 11.3 开发者预览版/公测版 Beta 6正式发布

    当发布新版操作系统时,为了保证系统的稳定性和完整性,通常会先发布开发者预览版,让开发者先行体验并提供反馈,根据反馈进行修复和改进,之后再发布公测版,供更广泛的用户体验和反馈。最终确定稳定可靠的版本后,才会正式发布。以下是macOS Big Sur 11.3 开发者预览版/公测版 Beta 6正式发布的完整攻略: 1. 确认设备与要求 首先,需要确认你的设备是…

    other 2023年6月26日
    00
  • 后缀名为.td的是什么文件td文件用什么打开?

    后缀名为.td的文件是通常用于存储表格数据的文件,它是Tableau软件的一种数据文件格式。Tableau是一款用于数据可视化和分析的强大工具,可以帮助用户将数据转化为易于理解和交互的图表和报表。 要打开.td文件,您需要安装Tableau软件,并按照以下步骤进行操作: 下载和安装Tableau软件:您可以从Tableau官方网站(https://www.t…

    other 2023年8月5日
    00
  • 详解iOS集成GoogleMap(定位、搜索)

    详解iOS集成GoogleMap(定位、搜索): 1. 在Google Cloud Platform中创建API Key和Billable账户 在Google Cloud Platform中创建API Key,并开启相关服务,如Maps SDK for iOS、Places API等。同时需要创建一个Billable账户,并绑定到Google Cloud P…

    other 2023年6月26日
    00
  • 制作动态链接库给opencv程序使用(使用QtCreator)

    下面是“制作动态链接库给opencv程序使用(使用QtCreator)”的完整攻略,包括创建Qt项目、编写代码、生成动态链接库和使用动态链接库等方面。 创建Qt项目 首先,需要创建一个Qt项目,用于编写动态链接库的代码。可以使用以下步骤创建Qt项目: 打开Qt Creator; 选择“新建项目”; 选择“库”; 选择“动态库”; 输入项目名称和路径; 点击“…

    other 2023年5月6日
    00
  • beforeunload打点丢失原因分析及解决方案

    在Web开发中,beforeunload事件通常用于在用户关闭页面或离开页面之前执行一些操作,例如保存用户输入的数据或记录用户的行为。然而,由于浏览器的安全策略,beforeunload事件可能会丢失打点数据。本攻略将详细讲解beforeunload事件丢失打点数据的原因,并提供两个解决方案。 beforeunload事件丢失打点数据的原因 在beforeu…

    other 2023年5月6日
    00
  • 解析Nginx中的日志模块及日志基本的初始化和过滤配置

    解析Nginx中的日志模块及日志基本的初始化和过滤配置是Nginx的重要组成部分之一。下面是该攻略的详细步骤: 步骤一:开启Nginx日志模块 在Nginx配置文件中,首先需要开启日志模块。一般来说,需要在http代码块中设置log_format配置项。具体代码如下: http { … log_format main ‘$remote_addr – $r…

    other 2023年6月20日
    00
  • 如何查看Win11系统是32位还是64位呢?

    要查看Windows 11系统是32位还是64位,可以按照以下步骤进行操作: 打开“设置”:点击任务栏上的“开始”按钮,然后点击“设置”图标(齿轮状图标)。 进入“系统”设置:在“设置”窗口中,点击左侧导航栏中的“系统”选项。 查看系统信息:在“系统”设置页面中,向下滚动,找到并点击“关于”选项。 查看系统类型:在“关于”页面中,可以看到系统的详细信息,包括…

    other 2023年7月28日
    00
  • Android如何创建自定义ActionBar

    创建自定义 ActionBar 通常涉及以下步骤: 1.在应用程序清单文件(AndroidManifest.xml)中启用 ActionBar。 <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> <applica…

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