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日

相关文章

  • 死亡空间重制版游戏模型不加载怎么办 模型不加载、卡顿解决方法

    死亡空间重制版游戏模型不加载怎么办 在玩死亡空间重制版时,有时会出现游戏模型不加载或卡顿的情况,这可能会影响游戏体验。以下是解决这些问题的方法: 模型不加载的解决方法 当游戏中的模型没有正常加载时,很可能是游戏文件出现了错误。这时可以尝试以下方法: 1. 检查游戏文件 在游戏的安装目录中找到 “Death Space.ini” 文件,将其中的 “USE RE…

    other 2023年6月27日
    00
  • 开机还原软件哪个比较好用?几款免费好用的开机还原软件下载推荐

    开机还原软件是一种非常实用的工具,可以帮助用户轻松地还原系统到初始状态。本文将详细讲解如何选择一款好用的开机还原软件,并推荐几款免费好用的开机还原软件供读者参考。 如何选择一款好用的开机还原软件 稳定性和兼容性:选择一款开机还原软件时,首先要考虑其稳定性和兼容性。软件要能够兼容用户的操作系统,而且不能因为软件本身的问题导致系统崩溃,否则会造成严重后果。 功能…

    other 2023年6月27日
    00
  • react实现组件状态缓存的示例代码

    下面是实现组件状态缓存的示例代码攻略: 1. 使用React hooks实现组件状态缓存 React中提供了一个useMemo hooks,用于缓存计算结果,可以用来实现组件状态的缓存。 示例1 下面是一个展示当前时间的组件Clock,在每次渲染时都会重新计算时间,可以用useMemo来缓存计算结果,避免多次重复计算: import React, { use…

    other 2023年6月27日
    00
  • photoshop+xara3d打造独特3d文字效果

    以下是关于“Photoshop+Xara3D打造独特3D文字效果”的完整攻略,包括基本概念、步骤和两个示例说明。 基本概念 Photoshop是一款图像软件,可以用来编辑和处理图像。Xara3D是一款3D文字制作软件,可以用来制作独特的3D效果。 步骤 以下是使用Photoshop和Xara3D制作独特3D文字效果的步骤: 打开Photoshop,创建一个新…

    other 2023年5月7日
    00
  • java各种类型对象占用内存情况分析

    Java各种类型对象占用内存情况分析攻略 在Java中,不同类型的对象在内存中占用的空间大小是不同的。了解这些对象的内存占用情况对于优化内存使用和性能调优非常重要。本攻略将详细讲解Java中各种类型对象的内存占用情况,并提供两个示例说明。 1. 基本数据类型 Java的基本数据类型在内存中占用的空间大小是固定的,不受对象的影响。以下是常见的基本数据类型及其占…

    other 2023年8月2日
    00
  • Win10创意者更新15063.138及周年更新版本为14393.1083等版本获累积更新推送

    Win10创意者更新15063.138及周年更新版本为14393.1083等版本获累积更新推送攻略 简介 Win10创意者更新15063.138及周年更新版本为14393.1083等版本是微软针对Windows 10操作系统发布的累积更新。这些更新包含了修复漏洞、提升性能和增加新功能等方面的改进。本攻略将详细介绍如何获取和安装这些累积更新。 步骤一:检查更新…

    other 2023年8月3日
    00
  • p2p通信原理及实现

    P2P通信原理及实现 什么是P2P通信? P2P(点对点)通信是一种不需要专门的中心服务器就可以进行互联的通信方式,每个用户都可以在需要的时候直接与其他用户进行数据交换。P2P在许多网络应用中都得到了广泛的应用,例如P2P文件共享、P2P语音、视频通话等。 P2P通信的原理 在P2P通信中,每个节点都充当着同时作为客户端和服务器端的角色。当其中一个节点需要与…

    其他 2023年3月29日
    00
  • maven下mybatis-plus和pagehelp冲突问题的解决方法

    解决 Maven 下 MyBatis-Plus 和 PageHelper 冲突问题的方法如下: 问题描述 在使用 Maven 构建项目时,如果引入了 MyBatis-Plus 和 PageHelper 两个依赖,会因为它们都依赖于 MyBatis 造成冲突,导致编译出错。 具体来说,MyBatis-Plus 依赖 MyBatis 3.5.x,而 PageHe…

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