java实现上传和下载工具类

当我们需要在Java程序中实现文件上传和下载的功能时,可以采用Java的IO类来实现。下面是实现上传和下载功能的步骤。

1. 上传文件

1.1 上传文件的前端HTML页面

在上传文件的前端页面中,我们需要使用到input标签和form标签。如下所示:

<form action="/upload" method="POST" enctype="multipart/form-data">
   <input type="file" name="file" />
   <input type="submit" value="Upload" />
</form>

其中,action属性指定上传的路径,method属性指定请求的方法为POST,enctype属性指定表单的 MIME 类型为multipart/form-data。

1.2 实现文件上传的后端Java程序

我们可以使用Java的IO类来完成文件上传功能。如下所示:

@RequestMapping(value = "/upload", method = RequestMethod.POST, produces = "text/plain;charset=UTF-8")
@ResponseBody
public String upload(HttpServletRequest request) {
    try {
        // 获取上传文件的流和文件名
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        MultipartFile file = multipartRequest.getFile("file");
        String fileName = file.getOriginalFilename();
        // 设置上传文件的路径
        String filePath = "path/";

        // 开始上传文件
        InputStream inputStream = file.getInputStream();
        FileOutputStream fileOutputStream = new FileOutputStream(filePath + fileName);
        byte[] buffer = new byte[1024];
        int length = 0;
        while ((length = inputStream.read(buffer)) > 0) {
            fileOutputStream.write(buffer, 0, length);
        }

        fileOutputStream.close();
        inputStream.close();

        return "上传成功!";
    } catch (Exception e) {
        return "上传失败!";
    }
}

首先,我们要在Controller类中加上@RequestMapping注解来指定请求的 URL 和方法类型。该方法的参数为 HttpServletRequest,可以通过该参数获取上传的文件流和文件名。然后指定上传文件的路径,并根据文件名创建一个新的文件。最后,不断读取上传文件的流,并将读取到的内容写到新创建的文件中。

2. 下载文件

2.1 下载文件的前端HTML页面

在下载文件的前端页面中,我们需要使用到HTML的a标签,并在标签的href属性中指定要下载的文件路径。如下所示:

<a href="/download/file" download="file">Download</a>

其中,href属性指定要下载的文件路径,download属性指定下载文件的名称。

2.2 实现文件下载的后端Java程序

我们也可以使用Java的IO类来完成文件下载功能。如下所示:

@RequestMapping("/download/{fileName}")
public ResponseEntity<byte[]> download(@PathVariable("fileName") String fileName) throws IOException {
    File file = new File("path/" + fileName);
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    headers.setContentDispositionFormData("attachment", fileName);
    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
}

使用 @RequestMapping 注解指定请求的 URL,方法中的 @PathVariable 注解用于获取 URL 中的参数。然后使用 Java 的 IO 类读取文件,并通过 ResponseEntity 将文件以流的形式返回给客户端。其中,headers.setContentType(MediaType.APPLICATION_OCTET_STREAM) 用于指定返回的文件类型,headers.setContentDispositionFormData("attachment", fileName) 用于设置下载文件的名称。

示例1:实现通过Java上传文件到FTP服务器中

public class FtpUtil {
    private String ftpHost = "***";
    private String ftpUserName = "***";
    private String ftpPassword = "***";
    private int ftpPort = 21;
    private String ftpPath = "/";

    public FtpUtil() {
    }

    /**
     * 上传文件
     *
     * @param fileName 文件名称
     * @param input    文件流
     * @return boolean
     */
    public boolean uploadFile(String fileName, InputStream input) {
        boolean success = false;
        FTPClient ftp = new FTPClient();
        ftp.setControlEncoding("GBK");
        try {
            int reply;
            ftp.connect(ftpHost, ftpPort);
            ftp.login(ftpUserName, ftpPassword);
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return success;
            }
            ftp.enterLocalPassiveMode();
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            if (!ftp.changeWorkingDirectory(ftpPath)) {
                ftp.makeDirectory(ftpPath);
                ftp.changeWorkingDirectory(ftpPath);
            }
            if (ftp.storeFile(fileName, input)) {
                success = true;
            }
            ftp.logout();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return success;
    }
}

示例2:实现通过Java从FTP服务器中下载文件到本地

public class FTPUtil {
    private static final String FTP_ADDRESS = "***";
    private static final String FTP_PORT = "***";
    private static final String FTP_USERNAME = "***";
    private static final String FTP_PASSWORD = "***";
    private static final String FTP_BASEPATH = "***";

    /**
     * 从FTP服务器下载文件
     *
     * @param localPath  下载至本地的路径
     * @param remotePath FTP服务器中文件的路径
     * @param fileName   文件名称
     * @return boolean
     */
    public static boolean downloadFile(String localPath, String remotePath, String fileName) {
        boolean success = false;
        FTPClient ftp = new FTPClient();
        try {
            int reply;
            ftp.connect(FTP_ADDRESS, Integer.parseInt(FTP_PORT));
            ftp.login(FTP_USERNAME, FTP_PASSWORD);
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return success;
            }
            ftp.changeWorkingDirectory(FTP_BASEPATH);
            ftp.enterLocalPassiveMode();
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            File localFile = new File(localPath + File.separatorChar + fileName);
            OutputStream os = new FileOutputStream(localFile);
            if (ftp.retrieveFile(remotePath + fileName, os)) {
                success = true;
            }
            os.close();
            ftp.logout();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return success;
    }
}

这两个示例展示了在Java程序中实现上传和下载文件的两种方式。第一个示例演示了如何通过Java程序将文件上传到FTP服务器中,第二个示例演示了如何通过 Java 程序从 FTP 服务器中下载文件到本地。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现上传和下载工具类 - Python技术站

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

相关文章

  • IDEA+Maven搭建Spring环境的详细教程

    下面是 “IDEA+Maven搭建Spring环境的详细教程” 的完整攻略: 一、环境准备 在开始前,需要准备以下环境: IntelliJ IDEA:Java开发工具,建议使用 IntelliJ IDEA 2020 或以上版本。 Maven:自动化构建工具。 JDK:Java开发环境。 二、创建Maven项目 打开 IntelliJ IDEA,点击 “Cre…

    Java 2023年5月19日
    00
  • java使用http实现文件下载学习示例

    Java使用HTTP实现文件下载学习示例 什么是HTTP? HTTP是一种应用层协议,用于在网络中传输超文本数据。HTTP是Web的基础,它使Web能够进行交互式连接。 Java如何使用HTTP实现文件下载? Java提供了多种方式可以使用HTTP进行文件下载,这里介绍两种常用的方式。 使用HttpURLConnection类 HttpURLConnecti…

    Java 2023年5月19日
    00
  • 详解Spring Boot中如何自定义SpringMVC配置

    详解Spring Boot中如何自定义Spring MVC配置 Spring Boot是一个快速开发框架,可以帮助开发人员快速构建Web应用程序。在Spring Boot中,Spring MVC是默认的Web框架。本文将介绍如何自定义Spring MVC配置,包括添加拦截器、自定义消息转换器、自定义异常处理器等,并提供两个示例。 自定义Spring MVC配…

    Java 2023年5月15日
    00
  • 外部web端访问微信小程序云数据库的三种方法总结

    下面给您详细讲解 “外部web端访问微信小程序云数据库的三种方法总结”: 背景 微信小程序云开发是微信官方提供的一种云计算解决方案,提供了数据库、文件存储、云函数等一系列服务。但是在一些场景下,我们需要通过外部的web端来访问小程序云数据库,比如在Web管理后台展示小程序的数据,或在Web端开发一些管理工具等。 方法 1. 使用云函数作为中转 这是一种简单有…

    Java 2023年5月23日
    00
  • 浅谈Spring学习之request,session与globalSession作用域

    浅谈Spring学习之request,session与globalSession作用域 1. 介绍 在 Spring 中,我们可以通过 request、session 和 globalSession 三种作用域来存储数据。这些作用域的范围从小到大逐级升高,对应的生命周期也逐级递增,具体的介绍如下: request:处理一次请求的过程中有效,即发送一次请求到服…

    Java 2023年6月15日
    00
  • jdk与jre的区别 很形象,很清晰,通俗易懂

    下面是关于 “JDK与JRE的区别” 的详细讲解,希望对你有所帮助。 JDK与JRE的概念 在理解JDK与JRE的区别之前,我们先来简要了解一下这两个概念: Java Development Kit(JDK)是Java开发包,包含了Java的核心类库、编译器javac、JVM调试器jdb等开发工具,以及其他一些附属工具。 Java Runtime Envir…

    Java 2023年5月24日
    00
  • Apache shiro的简单介绍与使用教程(与spring整合使用)

    下面是关于“Apache Shiro的简单介绍与使用教程(与Spring整合使用)”的完整攻略。 什么是Apache Shiro Apache Shiro是一个强大且易于使用的Java安全框架,它提供了身份验证、授权、密码加密等安全性功能。Shiro使用简单,易于扩展和集成到任何应用程序中,它的目标是成为Java世界最全面和最灵活的安全框架。 Shiro的核…

    Java 2023年5月20日
    00
  • 两个JSP页面父页面获取子页面内容的两种方法

    我们来详细讲解一下如何在JSP页面中实现父页面获取子页面内容的两种方法。 概述 在JSP中,子页面中可能会包含一些重要的内容,而父页面需要获取这些内容。常见的想法是通过使用JavaScript解析DOM树,但这种方法存在一些繁琐和困难。因此,在这里我们介绍两种非常简单的方法来实现该功能: 使用JSP隐式对象 使用标签 方法一:使用JSP隐式对象 JSP页面中…

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