Java上传文件到服务器端的方法

关于Java上传文件到服务器端的方法,主要有以下两种方式:

方式一:使用原生java.net.URLConnection API上传文件

==Step 1:== 前端HTML代码中,增加文件上传控件(input type="file")

<form method="post" action="http://localhost:8080/uploadFile" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="上传文件"/>
</form>

==Step 2:== 服务端Java代码中,使用URLConnection类实现文件上传

@PostMapping("/uploadFile")
@ResponseBody
public String uploadFile(HttpServletRequest request) throws IOException {
    // 获取文件
    MultipartFile file = ((MultipartHttpServletRequest) request).getFile("file");
    String fileName = file.getOriginalFilename();
    // 创建URL对象
    URL url = new URL("http://localhost:8080/uploadFile");
    // 创建连接
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    // 设置请求方法为POST
    connection.setRequestMethod("POST");

    // 设置请求头
    connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + "FILE_BOUNDARY");

    // 开启写入模式
    connection.setDoOutput(true);
    connection.setDoInput(true);

    // 获取输出流
    OutputStream outputStream = connection.getOutputStream();
    PrintWriter writer = new PrintWriter(outputStream);
    // 构造文件写入请求体
    writer.append("--" + "FILE_BOUNDARY" + "\r\n");
    writer.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + fileName + "\"\r\n");
    writer.append("Content-Type: application/octet-stream\r\n\r\n");
    writer.flush();

    // 写入文件
    FileInputStream fis = (FileInputStream) file.getInputStream();
    byte[] buffer = new byte[4096];
    int length;
    while ((length = fis.read(buffer)) > 0) {
        outputStream.write(buffer, 0, length);
    }
    outputStream.flush();
    fis.close();

    // 完成请求体
    writer.append("\r\n--" + "FILE_BOUNDARY" + "--\r\n");
    writer.flush();

    // 获取服务器响应
    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    String line;
    StringBuilder stringBuilder = new StringBuilder();
    while ((line = reader.readLine()) != null) {
        stringBuilder.append(line).append("\n");
    }
    reader.close();
    connection.disconnect();
    return stringBuilder.toString();
}

方式二:使用Apache HttpClient库上传文件

==Step 1:== Maven依赖

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.10</version>
</dependency>

==Step 2:== 服务端Java代码中,使用HttpClient类实现文件上传

@PostMapping("/uploadFile")
@ResponseBody
public String uploadFile(HttpServletRequest request) throws IOException {
    // 获取文件
    MultipartFile file = ((MultipartHttpServletRequest) request).getFile("file");
    String fileName = file.getOriginalFilename();

    // 创建HttpClient对象
    CloseableHttpClient httpClient = HttpClients.createDefault();
    // 创建HttpPost对象
    HttpPost httpPost = new HttpPost("http://localhost:8080/uploadFile");
    // 创建文件体
    HttpEntity httpEntity = MultipartEntityBuilder.create()
            .addBinaryBody("file", file.getInputStream(), ContentType.DEFAULT_BINARY, fileName)
            .build();
    // 设置请求体
    httpPost.setEntity(httpEntity);
    // 发送请求并获取响应
    CloseableHttpResponse response = httpClient.execute(httpPost);
    // 读取响应内容
    InputStream inputStream = response.getEntity().getContent();
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
    StringBuilder stringBuilder = new StringBuilder();
    String line;
    while ((line = reader.readLine()) != null) {
        stringBuilder.append(line).append("\n");
    }
    reader.close();
    inputStream.close();
    httpClient.close();
    response.close();
    return stringBuilder.toString();
}

以上就是Java上传文件到服务器端的两种方法,可以根据需求选择使用其中一种。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java上传文件到服务器端的方法 - Python技术站

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

相关文章

  • Java从零编写吃货联盟订餐系统全程讲解

    Java从零编写吃货联盟订餐系统全程讲解攻略 前言 本文将从零开始,详细讲解如何使用Java编写一个在线订餐系统,旨在帮助大家提升Java编程能力,学习实际开发流程。本文将涵盖以下内容: 需求分析及功能设计 系统架构设计 数据库设计 代码开发及测试 总结和下一步计划 需求分析及功能设计 在设计任何系统之前,需要对需求进行详细分析。我们的订餐系统需要满足以下需…

    Java 2023年5月24日
    00
  • Java对象的创建过程是什么?

    Java对象的创建过程是Java程序中非常基础、也非常重要的一部分。在Java编程中开发者需要清楚理解Java对象创建的整个流程,本文将为读者详细讲解Java对象的创建过程。 Java对象的创建过程 在Java编程中,创建一个Java对象涉及到了三个步骤: 1、类的加载与加载机制 类的加载与加载机制是Java程序启动时的第一步,Java类需要在Java虚拟机…

    Java 2023年5月11日
    00
  • java编写简单的ATM存取系统

    下面是Java编写简单的ATM存取系统的完整攻略。 1. 确定需求分析 在开始编写ATM系统之前,我们需要对系统的需求进行分析和确认。该系统的主要功能包括: 可以登录和注册账户 可以查询账户余额 可以取款和存款 可以修改账户密码 可以退出系统 2. 设计系统架构 确定了需求之后,我们需要设计ATM系统的整体架构。整个系统需要有以下几个模块: 用户登录和注册模…

    Java 2023年5月19日
    00
  • Java并发编程示例(七):守护线程的创建和运行

    今天我们来详细讲解一下Java并发编程示例中的第七篇——“守护线程的创建和运行”。 什么是守护线程? 在Java中,有两种线程:用户线程和守护线程。 通俗来讲,用户线程属于前台线程,即主线程运行结束后,此线程不会因为还有工作要做而被强制退出;而守护线程属于后台线程,当主线程运行结束后,所有没有被结束的守护线程也会随之结束。也就是说,Java虚拟机只有用户线程…

    Java 2023年5月19日
    00
  • 深入浅析Java常用的格式化Json工具类

    深入浅析Java常用的格式化Json工具类 什么是Json JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,也易于机器解析和生成。JSON是基于JavaScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯。这些特性使JSON成为理想的数据交换语言。 Jav…

    Java 2023年5月26日
    00
  • 新手初学Java面向对象

    新手初学Java面向对象攻略 Java是一门面向对象的编程语言,学习Java面向对象编程是Java学习的核心,也是初学者们必须掌握的必要技能。 以下是新手初学Java面向对象的完整攻略,内容包括理论知识和实践经验,希望对初学者们有所帮助。 一、理论知识 面向对象的概念 面向对象(Object-Oriented,简称 OO)是一种基本的程序设计思想,核心是“对…

    Java 2023年5月23日
    00
  • JSP struts2 url传参中文乱码解决办法

    JSP struts2 url传参中文乱码解决办法 问题描述 在使用 JSP 和 Struts2 构建 Web 应用程序时,我们常常需要通过 URL 传参。但是,如果参数中包含中文等非 ASCII 字符,就会出现乱码的问题。这是因为浏览器默认使用的是 ISO-8859-1 编码方式,而中文需要使用 UTF-8 编码,两种编码方式不同,导致乱码的出现。 解决办…

    Java 2023年6月15日
    00
  • response对象的使用(实例讲解)

    响应对象(response object)是在 Python Web 应用程序中最常用的对象之一。在 Web 应用程序中,请求(request)将发送到 Web 服务器来获得一个响应(response)。Python 中的 response 对象包含向客户端发送响应的方法和属性。 一个典型的 response 对象主要有以下几个常用的属性和方法: statu…

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