Java客户端服务端上传接收文件实现详解

Java客户端服务端上传接收文件实现详解

本文针对Java客户端与服务端之间的文件上传与接收过程进行详细讲解,包括服务端搭建、客户端实现、文件上传与接收等方面。

服务端搭建

服务端主要负责接收文件并进行处理。以下是搭建服务端的步骤:

  1. 创建一个Java项目
  2. 引入spring-boot-starter-web依赖(以Spring Boot为例)
  3. 创建文件上传接口,以@PostMapping注解的方式实现文件接收
  4. 在文件上传接口中,使用MultipartFile对象获取上传文件的相关信息,如文件名、大小等。

以下是示例代码:

@RestController
public class FileController {

    @PostMapping("/upload")
    public String upload(@RequestParam("file") MultipartFile file) throws IOException {
        String filename = file.getOriginalFilename();
        System.out.println("接收到文件:" + filename);
        // 文件保存操作
        file.transferTo(new File("D:/upload/" + filename));
        return "文件上传成功!";
    }
}

在上述代码中,@RequestParam注解中的file表示上传文件在表单中的name属性,通过MultipartFile对象获取上传文件的相关信息。之后将文件保存到指定的存储路径。

客户端实现

客户端主要负责将本地文件发送至服务端。以下是客户端实现的步骤:

  1. 引入spring-boot-starter-web依赖(以Spring Boot为例)
  2. 创建RestTemplate对象
  3. 创建一个MultiValueMap对象,并将需要上传的文件以ByteArrayResource类型的方式添加到其中
  4. 构造一个HttpHeaders对象,设置请求头
  5. 执行POST请求,并将MultiValueMapHttpHeaders对象作为请求体参数

以下是示例代码:

public class FileUploadClient {

    public static void main(String[] args) throws IOException {
        // URL
        String url = "http://localhost:8080/upload";
        // 文件路径
        String filepath = "D:/upload/test.txt";

        RestTemplate restTemplate = new RestTemplate();
        FileSystemResource fileResource = new FileSystemResource(filepath);

        MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
        param.add("file", fileResource);

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);

        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(param, headers);

        ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);
        System.out.println(response.getBody());
    }
}

在上述代码中,使用RestTemplate对象执行POST请求,并将文件以ByteArrayResource类型的方式添加到MultiValueMap对象中。可以通过设置HttpHeaders对象的Content-Type属性为MULTIPART_FORM_DATA来设置请求头,最后将MultiValueMapHttpHeaders对象作为请求体参数进行POST请求。

文件上传与接收

通过上述服务端与客户端的实现,可以实现文件的上传与接收。客户端将本地文件以POST方式上传到服务端,服务端接收后进行相应处理。

以下是文件上传与接收的示例代码:

public class FileUploadClient {

    public static void main(String[] args) throws IOException {
        // URL
        String url = "http://localhost:8080/upload";
        // 文件路径
        String filepath = "D:/upload/test.txt";

        RestTemplate restTemplate = new RestTemplate();
        FileSystemResource fileResource = new FileSystemResource(filepath);

        MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
        param.add("file", fileResource);

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);

        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(param, headers);

        ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);
        System.out.println(response.getBody());
    }
}

@RestController
public class FileController {

    @PostMapping("/upload")
    public String upload(@RequestParam("file") MultipartFile file) throws IOException {
        String filename = file.getOriginalFilename();
        System.out.println("接收到文件:" + filename);
        // 文件保存操作
        file.transferTo(new File("D:/upload/" + filename));
        return "文件上传成功!";
    }
}

上述示例代码中,客户端将本地D:/upload/test.txt文件上传到服务端的/upload路径中,服务端接收到文件后将其保存至D:/upload/目录下。

另外一个示例,可以参考以下的代码:

public class FileUploadClient {

    private static final int BUFFER_SIZE = 1024;

    public static void main(String[] args) throws IOException {

        String filepath = "D:/upload/test.txt";
        String url = "http://localhost:8080/upload";

        HttpClient httpclient = HttpClients.createDefault();
        HttpPost httppost = new HttpPost(url);

        File file = new File(filepath);

        FileEntity entity = new FileEntity(file);
        entity.setContentType("multipart/form-data");

        httppost.setEntity(entity);

        HttpResponse response = httpclient.execute(httppost);
        HttpEntity responseEntity = response.getEntity();
        System.out.println(EntityUtils.toString(responseEntity));
    }
}

@RestController
public class FileController {

    @PostMapping("/upload")
    public String upload(HttpServletRequest request) throws Exception {
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);

        if (isMultipart) {
            DiskFileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);

            List<FileItem> items = upload.parseRequest(request);
            Iterator<FileItem> iterator = items.iterator();

            while (iterator.hasNext()) {
                FileItem item = iterator.next();

                if (!item.isFormField()) {
                    String fileName = StringUtils.cleanPath(item.getName());
                    String uploadPath = "D:/upload/";
                    Path path = Paths.get(uploadPath + fileName);
                    Files.copy(item.getInputStream(), path, StandardCopyOption.REPLACE_EXISTING);
                    return "文件上传成功!";
                }
            }
        }

        return "文件上传失败!";
    }
}

在上述示例代码中,客户端通过HttpClient对象执行POST请求,并将文件以FileEntity类型的方式添加到请求体中。服务端利用Apache Commons FileUpload工具处理请求中的文件,并保存至指定目录下。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java客户端服务端上传接收文件实现详解 - Python技术站

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

相关文章

  • Java将科学计数法数据转为字符串的实例

    下面是Java将科学计数法数据转为字符串的实例的完整攻略。 什么是科学计数法? 科学计数法是一种用于较大或较小数字表示的方法,也称为指数计数法。在科学计数法中,数字首先被写成一个在1到10之间的数字(称为尾数),然后将这个数字乘以10的乘方来获得原数字。 例如:1.23 × 10^4,其中1.23是尾数,4是指数。在Java中,双精度浮点数和单精度浮点数默认…

    Java 2023年5月27日
    00
  • springboot实战权限管理功能图文步骤附含源码

    下面我就为您讲解一下“springboot实战权限管理功能图文步骤附含源码”的完整攻略。 一、搭建Spring Boot环境 首先,我们需要搭建好Spring Boot的运行环境,并创建一个新的Spring Boot项目。下面是新建一个Spring Boot项目的步骤: 打开IntelliJ IDEA软件,选择File -> New -> Pro…

    Java 2023年5月20日
    00
  • 详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】

    详解js的延迟对象、跨域、模板引擎、弹出层、AJAX 本文主要介绍 JavaScript 中五个常用的技术点:延迟对象、跨域、模板引擎、弹出层和 AJAX。我们将使用示例来演示这五个技术点的应用。 延迟对象 延迟对象(Deferred Object)是 jQuery 中异步编程的核心概念之一。在 JavaScript 中,通常采用回调函数进行异步编程。而延迟…

    Java 2023年5月19日
    00
  • Lucene单值编码压缩算法源码解析

    Lucene单值编码压缩算法源码解析 算法简介 Lucene单值编码压缩算法是一种占用空间极小、压缩率极高的算法,主要用于Lucene搜索引擎中的索引数据存储。该算法的核心思想是将一个整数序列转化为一个字节数组,最终实现对数据的高效压缩。 算法原理 Lucene单值编码压缩算法采用可变字节长度编码方式,即不同数值的编码长度可能不同。对于一个整数,首先根据它的…

    Java 2023年5月20日
    00
  • java数组输出的实例代码

    下面我将为您详细讲解“Java数组输出的实例代码”的完整攻略,包含以下内容: 数组的定义与初始化 数组元素的访问和输出 示例说明 数组的定义与初始化 在Java中,定义数组需要指定数组的类型和数组的大小,格式如下: 数据类型[] 数组名 = new 数据类型[数组大小]; 其中,数据类型可以为Java中的任意基本数据类型或引用类型,数组大小为正整数。 例如,…

    Java 2023年5月23日
    00
  • 解决jsp开发中不支持EL问题

    在jsp开发中,有时会遇到EL表达式不被支持的问题。对此,下面是完整攻略: 问题背景 在jsp开发中,可以使用EL表达式来简化开发过程,但有时在使用EL表达式时会遭遇并发生“不支持EL表达式”的问题,通常会因为如下原因: web.xml文件缺少支持EL表达式的配置; 服务器版本过低,不支持EL表达式导致不生效; 需要使用el-api和jstl(JSP标准标签…

    Java 2023年6月15日
    00
  • Java项目的目录结构详解

    下面我来详细讲解Java项目的目录结构: 1. 为什么需要规范的目录结构 在一个Java项目中使用规范的目录结构,可以帮助我们清晰地组织我们写的代码,管理项目中的不同模块,提高我们的项目管理和团队协作效率。 2. Java项目的目录结构 下面是Java项目的目录结构示意图: project ├── src │ ├── main │ │ ├── java # …

    Java 2023年5月20日
    00
  • 如何进行Java网络编程?

    当我们需要在Java程序中进行网络通信时,需要使用Java的网络编程技术。Java提供了Socket编程API,可以用Socket编程实现基于TCP或UDP协议的网络通信。下面是进行Java网络编程的完整使用攻略: 1. 创建Socket对象 Socket类代表了客户端与服务器之间的套接字,客户端可以使用它连接到服务器。在Java中创建Socket对象的语法…

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