java实现上传文件到服务器和客户端

下面是详细讲解 Java 实现上传文件到服务器和客户端的完整攻略:

一、上传文件到服务器

1、准备工作

用 Java 上传文件到服务器,需要用到 commons-fileuploadcommons-io 两个 Jar 包。这两个 Jar 包可以在 Maven 仓库中进行下载,下载方式详见如下链接:

  • commons-fileupload:https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload
  • commons-io:https://mvnrepository.com/artifact/commons-io/commons-io

2、前端页面

前端页面需要创建一个表单来上传文件,代码如下:

<form action="/upload" method="post" enctype="multipart/form-data">
   <input type="file" name="file"/>
   <input type="submit" value="上传"/>
</form>

3、后端代码

后端需要实现一个上传文件的接口,将前端传过来的文件保存到服务器上。示例代码如下:

@PostMapping("/upload")
@ResponseBody
public String upload(@RequestParam("file") MultipartFile file) {
    if (file.isEmpty()) {
        return "上传文件不能为空";
    }

    // 获取上传文件名称
    String fileName = file.getOriginalFilename();

    // 设置上传文件保存的路径
    String filePath = "D:/upload/";

    // 检查保存路径是否存在,不存在则创建
    File saveFile = new File(filePath);
    if (!saveFile.exists()) {
        saveFile.mkdirs();
    }

    try {
        // 保存上传的文件到目标路径
        file.transferTo(new File(filePath + fileName));
    } catch (IOException e) {
        e.printStackTrace();
        return "上传失败,请稍后重试";
    }

    return "上传成功";
}

二、下载文件到客户端

1、前端页面

前端页面提供一个下载按钮,用于触发文件下载的操作。示例代码如下:

<a href="/download?fileName=test.txt">下载文件</a>

2、后端代码

后端需要处理文件下载的请求,将需要下载的文件以二进制流的形式传输到客户端。示例代码如下:

@GetMapping("/download")
public void download(HttpServletResponse response, @RequestParam("fileName") String fileName) {
    // 获取要下载的文件路径
    String filePath = "D:/upload/";

    File file = new File(filePath + fileName);

    if (file.exists()) {
        try {
            // 读取要下载的文件,保存到字节数组中
            byte[] data = FileUtils.readFileToByteArray(file);

            // 设置响应头信息
            response.setContentType("application/octet-stream");
            response.setHeader("Content-disposition", "attachment;filename=" + fileName);

            // 写入响应流中
            ServletOutputStream outputStream = response.getOutputStream();
            outputStream.write(data);
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以上就是 Java 实现上传文件到服务器和客户端的完整攻略,希望对你有所帮助。

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

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

相关文章

  • C#使用ToUpper()与ToLower()方法将字符串进行大小写转换的方法

    C#使用ToUpper()与ToLower()方法将字符串进行大小写转换的方法 在C#中,我们可以使用ToUpper()和ToLower()方法来将字符串转换为大写或小写。这两个方法都是字符串类型的扩展方法,可以直接应用于字符串对象。 使用ToUpper()方法将字符串转换为大写 ToUpper()方法将字符串中的所有字符转换为大写形式,并返回转换后的新字符…

    other 2023年8月17日
    00
  • syn_sent(请求连接)问题

    syn_sent(请求连接)问题的完整攻略 在TCP协议中,当客户端向服务器发送连接请求时,客户端的状态会变为syn_sent(请求连接)。本文将详细介绍syn_sent(请求连接)问题的原因、影响和解决方法,并提供两个示例说明。 1. syn_sent(请求连接)的原因 syn_sent(请求连接)状态通常是由以下原因引起的: 网络延迟:当客户端发送连接请…

    other 2023年5月9日
    00
  • 深入理解链表的各类操作详解

    深入理解链表的各类操作详解 什么是链表 链表是一种数据结构,它由一连串的节点(node)组成。每个节点包含一个数据域和一个指针域。指针指向下一个节点,最后一个节点的指针为NULL。链表有单向链表、双向链表、循环链表等不同的形式。 下面我们会详细介绍链表的操作。 链表的创建 链表的创建分为两个步骤:创建头节点和向链表插入元素。 创建头节点 头节点是链表的第一个…

    other 2023年6月27日
    00
  • Android NDK开发之:配置环境的详解

    Android NDK开发之:配置环境的详解 什么是Android NDK Android NDK是Android Native Development Kit的缩写。 它是一个可以让开发人员用C和C ++编写本机代码的工具集,可用于在Android平台上进行高性能计算和渲染的应用程序。 使用NDK可以方便开发者迁移C/C++应用到Android系统平台中,…

    other 2023年6月27日
    00
  • Linux平台下文件的压缩与解压参数说明

    Linux平台下文件的压缩与解压参数说明攻略 在Linux平台下,我们可以使用不同的命令行工具来进行文件的压缩和解压操作。下面是一些常用的参数说明和示例。 1. gzip gzip是Linux下常用的文件压缩工具,它使用Lempel-Ziv编码(LZ77)算法进行压缩。以下是一些常用的参数说明: -c:将压缩后的文件输出到标准输出,而不是替换原始文件。 -d…

    other 2023年8月6日
    00
  • C++成员初始化列表

    C++中的成员初始化列表是定义构造函数时经常使用的技巧,它可以让我们在对象构造的过程中直接初始化成员变量,而不需要在构造函数里手动赋值。使用成员初始化列表可以提高程序的运行效率,也更加方便直观。 成员初始化列表使用冒号连接,语法如下: class MyClass { public: MyClass(int num1, int num2) : member1(…

    other 2023年6月20日
    00
  • WPF学习09:数据绑定之 Binding to List Data

    WPF学习09:数据绑定之 Binding to List Data 在WPF中,数据绑定是一项非常重要的功能,它可以让我们将UI元素与数据源进行绑定,使得数据的变化能够自动地反映到UI上。本文介绍如何绑定列表数据到WPF的UI元素中。 Binding to List Data 在WPF中,Binding to List Data是一种常见的数据绑定方式,它…

    其他 2023年3月28日
    00
  • php mysql获取表字段名称和字段信息的三种方法

    以下是关于“php mysql获取表字段名称和字段信息的三种方法”的详细攻略: 方法一:使用mysql_fetch_field函数获取字段信息 该方法使用mysql_fetch_field函数获取表中的字段信息,需要以下步骤: 1.链接数据库 $con = mysql_connect("localhost","root&quot…

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