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日

相关文章

  • Mac下安装tomcat的教程详解

    Mac下安装Tomcat的教程详解 Tomcat是一个流行的Java Web服务器,它可以运行Java Servlet和JSP应用程序。在Mac上安装Tomcat可以帮助开发人员快速开发Java Web应用程序。本教程将介绍如何在Mac上安装Tomcat,并启动一个简单的Web应用程序。 步骤一:安装Java 在安装Tomcat之前,必须先安装Java。在M…

    Java 2023年5月19日
    00
  • springboot整合JPA过程解析

    下面是对“springboot整合JPA过程解析”的完整攻略。 一、JPA介绍 JPA是Java Persistence API的缩写,是JavaEE环境下的持久化框架。它的目标是提供一种简单、统一的持久化方式,使得开发人员不需要过多关注数据访问细节,只需要关注业务逻辑的实现。 二、Spring Boot整合JPA 创建Maven项目并添加Spring Bo…

    Java 2023年6月1日
    00
  • html 中文乱码 HTML超链接中文乱码问题分析及解决方法

    下面详细讲解一下“HTML中文乱码HTML超链接中文乱码问题分析及解决方法”的完整攻略: 问题分析 在网页制作的过程中,有时候会遇到中文字符乱码的问题,尤其是在使用HTML超链接时更容易出现这种情况。HTML中文乱码问题往往由以下原因引起: 文本编辑器编码问题; 文件编码不正确; 在HTML文件中未设置正确的编码方式; 在服务器上读取HTML文件时编码方式不…

    Java 2023年5月20日
    00
  • Tomcat Cannot assign requested address: JVM_Bind 非端口占用冲突

    当运行Tomcat时,可能会出现以下错误: java.net.BindException: Cannot assign requested address: JVM_Bind 这个错误通常意味着Tomcat无法将其绑定到特定的IP地址和端口。以下是可能导致这个错误的几种原因,以及如何解决它们。 原因1: 该端口已被占用 此错误可能是因为要绑定的端口已经被其他…

    Java 2023年5月19日
    00
  • java之StringBuffer常见使用方法解析

    Java之StringBuffer常见使用方法解析 什么是StringBuffer StringBuffer类是Java语言中被广泛使用的字符串处理类之一,它是一个可变字符串类,可以动态的插入、删除、替换、反转字符串中的字符。 StringBuffer的常用方法 构造函数 StringBuffer提供了多个构造函数,用于构建不同的StringBuffer实例…

    Java 2023年5月27日
    00
  • Java实战权限管理系统的实现流程

    下面就详细讲解一下Java实战权限管理系统的实现流程。 目录 前言 权限管理系统实现流程 用户管理 角色管理 权限管理 权限控制 示例说明 总结 前言 权限管理系统是企业级应用系统的一个重要组成部分。Java实战中采用的权限管理系统采用了RBAC(Role-Based Access Control)模型,基于角色的访问控制。 权限管理系统实现流程 下面就是J…

    Java 2023年5月24日
    00
  • 教你怎么用java一键自动生成数据库文档

    下面我将详细讲解怎么用 Java 一键自动生成数据库文档的完整攻略,过程中将会包含两条示例。 1. 确定使用的工具 首先需要选择自动生成数据库文档的工具,推荐使用 DDLDoc 。 DDLDoc 是一个使用 Java 开发的工具,可以将数据库的表结构导出成 html 格式的文档,同时也支持 PDF 格式的导出。 2. 安装和配置DDLDoc 下载 DDLDo…

    Java 2023年5月19日
    00
  • 29基于java的在线考试系统设计与实现

    本章节来介绍一个基于java的在线考试系统的实现 系统概要 近年来,随着世界各国需要参加考核的人员与日俱增,单纯依靠传统的人工安排考场和监考人员的纸质化考试逐渐显示出了效率低,易发生冲突的缺陷,这时,在线考试系统便应运而生,此种考试方式以方便快捷高效等优点将越来越适用于如今的各项考试、考核。此外,无纸化在线考试对考试人员和审阅人员均提供了便捷。因此,本文将主…

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