springboot能否把excel文件发送到指定位置?

作者站长头像
站长
· 阅读数 6

如题,接到一个需求,大概的意思是:1、我先调一个接口,拿到一个excel文件。2、把这个文件上传到ftp里的某个位置。

回复
1个回答
avatar
test
2024-07-03

先在项目里引入 Apache Commons Net 依赖:

<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.8.0</version>
</dependency>

然后写一个上传 InputStream 到 FTP 的方法:

import org.apache.commons.net.ftp.FTPClient;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class FtpUtils {
    public static void uploadExcelToFTP(OutputStream outputStream, String ftpHost, int ftpPort, String ftpUser, String ftpPassword, String remotePath, String fileName) {
        FTPClient ftpClient = new FTPClient();
        try {
            // 连接到 FTP 服务器
            ftpClient.connect(ftpHost, ftpPort);
            // 登录 FTP
            ftpClient.login(ftpUser, ftpPassword);
            // 设置文件类型为二进制,防止文件损坏
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            // 切换工作目录
            ftpClient.changeWorkingDirectory(remotePath);

            // 将 OutputStream 转换为 InputStream
            ByteArrayInputStream inputStream = new ByteArrayInputStream(((ByteArrayOutputStream) outputStream).toByteArray());

            // 上传文件到 FTP
            ftpClient.storeFile(fileName, inputStream);

            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                ftpClient.logout();
                ftpClient.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

ByteArrayOutputStream:

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
EasyExcel.write(outputStream, YourDataClass.class).sheet("sheetName").doWrite(dataList);

最后你再调用 uploadExcelToFTP 方法上传 Excel就好了:

FtpUtils.uploadExcelToFTP(outputStream, ftpHost, ftpPort, ftpUser, ftpPassword, remotePath, fileName);
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容