栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

sftp方式下载压缩文件,直接操作字节流获取文件内容

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

sftp方式下载压缩文件,直接操作字节流获取文件内容

sftp方式下载压缩文件,直接操作字节流获取文件内容

示例代码如下:

package com.canggogo.lv.util;


import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Vector;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

@Component
@Slf4j
public class ChinapayBillDetailJob {



    @Value("${china.pay.sftp.host}")
    private String host;
    @Value("${china.pay.sftp.port}")
    private Integer port;
    @Value("${china.pay.sftp.userName}")
    private String userName;
    @Value("${china.pay.sftp.passWord}")
    private String passWord;

    
    public void chinapayBillDetailJobHandler(String param) throws Exception {
        log.info("任务 开始执行  时间:{}", param);
        try {
            long start = System.currentTimeMillis();
            // 建立链接
            JSch jSch = new JSch();
            Session session = null;

            session = jSch.getSession(userName, host, port);

            session.setPassword(passWord);
            // 这一行务必要加,不然会因为检测到公钥变化而拒绝连接,除非已经在本地配置好公钥了
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect();

            ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
            channelSftp.connect();

            List> result = getOriginalFile(channelSftp, param);


            for (Map rawdata: result) {
                //map中value为inputStream,参考流处理
                //  unZipAndUpload(rawData);
            }

            // 记得断开
            channelSftp.quit();
            session.disconnect();

            long end = System.currentTimeMillis();
            log.info("文件处理完成,消耗时间:{}毫秒", end - start);
        } catch (JSchException e) {
            e.printStackTrace();
        }
    }


    
    public List> getOriginalFile(ChannelSftp channelSftp, String date) throws SftpException, SftpException {
        String ftpPath = "/aaa/" + date + "/";

        List> result = new ArrayList<>();
        //组装源文件路径
        String dir = ftpPath;

        // ls要写绝对路径,输出的结果会携带权限等信息
        Vector vector =new Vector<>();
        try {
             vector = channelSftp.ls(dir);
        }catch (Exception e){
            e.printStackTrace();
            log.error("目标文件路径不存在!请检查参数日期是否正确!");
        }
        for (ChannelSftp.LsEntry entry : vector) {
            // 跳过 . .. 等特殊目录
            if (".".equals(entry.getFilename()) || "..".equals(entry.getFilename())) {
                continue;
            }
            if (entry.getFilename().contains(".") && "zip".equals(entry.getFilename().split("\.")[1])) {

                Map map = new HashMap<>(2);
                map.put("name", entry.getFilename().split("\.")[0]);
                // get同样要求绝对路径
                map.put("stream", channelSftp.get(dir + "/" + entry.getFilename()));
                result.add(map);
            }
        }

        return result;
    }

}

此方式返回结果map value为 InputStream
后续流处理可参考
https方式下载压缩文件,直接读取压缩文件内容 ,处理字节流等操作

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/325313.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号