Java 发送http请求上传文件功能实例

以下是Java发送HTTP请求上传文件的完整攻略,包含示例代码、步骤以及解释。

1. 前置准备

在进行Java发送HTTP请求上传文件之前,我们需要先做一些前置准备,具体如下:

  • 下载安装Java开发环境。
  • 学习Java基础知识,如I/O流、网络编程等。
  • 学习使用Java HttpURLConnection类发送HTTP请求。

2. 发送HTTP请求上传文件的步骤

具体的,通过以下步骤来实现Java发送HTTP请求上传文件功能:

2.1 构建URL对象

首先,我们需要使用如下代码构建一个URL对象,用于指定上传文件的接收URL地址:

URL url = new URL("http://example.com/upload");

2.2 打开连接

接着,我们可以使用如下代码打开一个HTTP连接:

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

2.3 设置连接属性

在开始上传文件之前,我们需要设置一些连接属性,包括请求方法、文件类型、文件大小等,具体如下:

conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
conn.setDoOutput(true);

其中,"POST"表示使用POST方式上传文件,"Content-Type"属性表示文件类型为"multipart/form-data","boundary"则表示上传文件的分隔符。

同时,由于我们需要向服务器发送文件数据,所以需要将"doOutput"属性设置为true。

2.4 构建multipart/form-data数据

在设置连接属性之后,我们需要根据上传文件的格式构建multipart/form-data格式的数据。具体构建方法如下:

DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes("--" + boundary + "\r\n");
dos.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"\r\n");
dos.writeBytes("Content-Type: application/octet-stream\r\n\r\n");

其中,boundary就是之前设置的分隔符,file.getName()表示获取上传文件的文件名,"Content-Type"表示文件类型为"application/octet-stream"。

2.5 读取文件数据

在构建数据之后,我们需要将文件的二进制数据读取到DataOutputStream流中:

FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len = -1;
while ((len = fis.read(buffer)) != -1) {
    dos.write(buffer, 0, len);
}

其中,file是上传文件的File对象,fis用于读取文件数据到内存缓冲区中。

2.6 结束multipart/form-data数据

数据读取完成后,我们需要通过向DataOutputStream流中写入结尾标识符来结束multipart/form-data数据的构建:

dos.writeBytes("\r\n--" + boundary + "--\r\n");
dos.flush();

2.7 获取响应数据

最后,我们可以通过以下代码获取服务器返回的响应数据:

BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;
while ((line = br.readLine()) != null) {
    System.out.println(line);
}

其中,"getInputStream"方法用于获取服务器响应的输入流,"BufferedReader"用于读取输入流中的字符串数据并输出到控制台中。

3. 示例代码

下面是两个示例代码,用于演示如何使用Java发送HTTP请求上传文件。

示例1:上传单个文件

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUploadFileDemo {

    public static void main(String[] args) throws IOException {
        File file = new File("图片.jpg");

        String boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW";
        URL url = new URL("http://example.com/upload");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
        conn.setDoOutput(true);

        DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
        dos.writeBytes("--" + boundary + "\r\n");
        dos.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"\r\n");
        dos.writeBytes("Content-Type: application/octet-stream\r\n\r\n");

        FileInputStream fis = new FileInputStream(file);
        byte[] buffer = new byte[1024];
        int len = -1;
        while ((len = fis.read(buffer)) != -1) {
            dos.write(buffer, 0, len);
        }

        dos.writeBytes("\r\n--" + boundary + "--\r\n");
        dos.flush();

        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line = null;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }

        fis.close();
        dos.close();
        br.close();
    }
}

示例2:上传多个文件

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUploadFilesDemo {

    public static void main(String[] args) throws IOException {
        File file1 = new File("文件1.txt");
        File file2 = new File("文件2.txt");
        File file3 = new File("文件3.txt");

        String boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW";
        URL url = new URL("http://example.com/upload");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
        conn.setDoOutput(true);

        DataOutputStream dos = new DataOutputStream(conn.getOutputStream());

        // 上传文件1
        dos.writeBytes("--" + boundary + "\r\n");
        dos.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + file1.getName() + "\"\r\n");
        dos.writeBytes("Content-Type: application/octet-stream\r\n\r\n");

        FileInputStream fis1 = new FileInputStream(file1);
        byte[] buffer1 = new byte[1024];
        int len1 = -1;
        while ((len1 = fis1.read(buffer1)) != -1) {
            dos.write(buffer1, 0, len1);
        }

        // 上传文件2
        dos.writeBytes("\r\n--" + boundary + "\r\n");
        dos.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + file2.getName() + "\"\r\n");
        dos.writeBytes("Content-Type: application/octet-stream\r\n\r\n");

        FileInputStream fis2 = new FileInputStream(file2);
        byte[] buffer2 = new byte[1024];
        int len2 = -1;
        while ((len2 = fis2.read(buffer2)) != -1) {
            dos.write(buffer2, 0, len2);
        }

        // 上传文件3
        dos.writeBytes("\r\n--" + boundary + "\r\n");
        dos.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + file3.getName() + "\"\r\n");
        dos.writeBytes("Content-Type: application/octet-stream\r\n\r\n");

        FileInputStream fis3 = new FileInputStream(file3);
        byte[] buffer3 = new byte[1024];
        int len3 = -1;
        while ((len3 = fis3.read(buffer3)) != -1) {
            dos.write(buffer3, 0, len3);
        }

        dos.writeBytes("\r\n--" + boundary + "--\r\n");
        dos.flush();

        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line = null;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }

        fis1.close();
        fis2.close();
        fis3.close();
        dos.close();
        br.close();
    }
}

以上就是Java发送HTTP请求上传文件的完整攻略,希望能够对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 发送http请求上传文件功能实例 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java 如何读取Excel格式xls、xlsx数据工具类

    Java如何读取Excel格式xls、xlsx数据 在Java中,我们可以使用POI库来操作Excel文件,这个库支持读取和写入Excel文件。下面我们将通过两个示例来讲解如何读取Excel格式xls、xlsx数据。 示例1:读取Excel文件中的数据 首先我们需要引入相关依赖。在pom.xml文件中添加以下配置: <dependencies> …

    Java 2023年5月19日
    00
  • 各种格式的编码解码工具类分享(hex解码 base64编码)

    各种格式的编码解码工具类分享 1. hex解码工具类 Hex是一种用16进制表示二进制数据的编码方式,我们可以通过Hex解码工具将16进制字符串转换成二进制数据。 以下是实现Hex解码的代码示例: public class HexUtil { /* * 将16进制字符串转换为byte数组 */ public static byte[] hex2Bytes(S…

    Java 2023年5月20日
    00
  • struts2数据处理_动力节点Java学院整理

    Struts2 数据处理攻略 Struts2 提供了非常方便的数据处理功能,包括表单提交、参数传递、数据封装等。本文将从以下三个方面详细介绍 Struts2 数据处理的攻略: 1.表单提交2.参数传递3.数据封装 表单提交 在 Struts2 中,我们可以通过表单提交的方式向服务器发送请求,并且可以同时将一些参数提交给服务器。具体操作步骤如下: 1.编写 J…

    Java 2023年5月20日
    00
  • Springboot集成Kafka进行批量消费及踩坑点

    下面我来详细讲解“Springboot集成Kafka进行批量消费及踩坑点”的完整攻略。 一、前言 Kafka是一款分布式消息队列系统,由Apache在2011年引入,其主要包括了生产者、消费者等API,用于实现消息的发送和接收等操作。而Springboot则是目前流行的一种开发框架,它可以简化Java应用的开发过程。本文将探讨如何在Springboot中集成…

    Java 2023年5月20日
    00
  • Java 集合框架掌握 Map 和 Set 的使用(内含哈希表源码解读及面试常考题)

    Java 集合框架掌握 Map 和 Set 的使用(内含哈希表源码解读及面试常考题) 介绍 Java 集合框架是 Java 语言提供的一个用于管理数据的框架,包含了一系列的接口和实现类,方便对不同类型的数据进行操作。其中,Map 和 Set 是集合框架中比较重要的部分。 本文将介绍 Map 和 Set 的使用方法,同时解读哈希表的源码,以及总结常见的面试考点…

    Java 2023年5月26日
    00
  • jsp Hibernate批量更新和批量删除处理代码

    下面我将为您详细讲解“jsp Hibernate批量更新和批量删除处理代码”的完整攻略。 什么是Hibernate? Hibernate是一个开源的面向关系型数据库的Java对象关系映射(ORM)框架,它将Java类与数据库表映射,将Java对象与数据库记录进行转换。使用Hibernate可以让我们像操作Java对象一样操作数据库,从而提高开发效率。 批量更…

    Java 2023年6月15日
    00
  • java 创建线程的四种方式

    当需要创建多个任务并行执行时,我们可以通过创建线程来实现。Java中创建线程有四种方式,分别是继承Thread类、实现Runnable接口、实现Callable接口并使用FutureTask包装器把Callable装载成一个线程、使用Executor框架创建线程池。下面依次介绍这四种方式: 继承Thread类 我们可以继承Thread类并重写run()方法实…

    Java 2023年5月18日
    00
  • SpringMVC配置404踩坑记录

    SpringMVC配置404踩坑记录 在使用SpringMVC开发Web应用程序时,我们经常会遇到404错误。本文将介绍如何在SpringMVC中配置404错误,并提供两个示例说明。 步骤一:配置web.xml 首先,我们需要在web.xml文件中配置SpringMVC的DispatcherServlet。可以通过添加以下配置来实现: <servlet…

    Java 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部