URL下载文件及文件打包成压缩包并设置密码加密及通过SFTP上传到远程服务器

URL下载文件及文件打包成压缩包并设置密码加密及通过SFTP上传到远程服务器

java实现URL下载文件并将下载的所有文件打包成压缩包,并对压缩包设置密码加密最后通过SFTP上传到远程服务器

废话不多说,直接上代码吧:

/**
     * 文件推送
     *
     * @param chnlcode
     * @param busnum
     */
    @Override
    public String electronicPolicyImagePush() {
        StringBuilder msg = new StringBuilder();
        LocalDate today = LocalDate.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
        String formattedDate = today.format(formatter);
        try {
            LDSysvarSchema ftpInfo = ldSysvarMapper.getPrintFtpInfo(chnlcode);
            List<String> policyList = puthMapper.findPolicyIssuedYesterday(chnlcode);
            log.info("获取昨日数据号为: {}", policyList.toString());
            if (policyList.isEmpty()) {
                msg.append("无数据,推送结束....");
                log.info("无数据,推送结束....");
                return msg.toString();
            }
            List<PdfUrlDto> pdfUrls = puthMapper.findImageAddress(policyList);
            List<PdfUrlDto> collect = pdfUrls.stream().filter(dto -> StringUtils.isNotBlank(dto.getUrl())).collect(Collectors.toList());
            if(collect.isEmpty()){
                msg.append("无数据,,推送结束....");
                log.info("无数据,,推送结束....");
                return msg.toString();
            }
            log.info("获取地址为: ");
            collect.stream().map(url -> url.getUrl()).forEach(url -> log.info("url:{}", url));
            log.info("开始pdf下载并转换成zip数据....");
            //设置压缩包名称
            String zipName = "MY" + formattedDate + ".zip";
            String key = "MY" + formattedDate; // 实际的密钥


            boolean result = downloadPdfFileToUploadToSFTP(collect, zipName, key,  ftpInfo);
            if (!result) {
                msg.append("推送业务入失败-- ");
                return msg.toString();
            }

            msg.append("推送业务成功-- ");
        } catch (Exception e) {
            log.info("推送业务入失败:{}", e.getMessage());
            msg.append("推送业务入失败-- ");
        }
        return msg.toString();
    }

    /**
     * pdf下载并转换成zip文件,上传数据到SFTP服务器
     *
     * @param pdfUrls
     * @param zipName
     * @param key
     * @param ftp
     */
    private boolean downloadPdfFileToUploadToSFTP(List<PdfUrlDto> pdfUrls, String zipName, String key, String text, String txtName, LDSysvarSchema ftp) {
        List<File> downloadedFiles = new ArrayList<>();
        Session session = null;
        ChannelSftp channelSftp = null;
        InputStream src = null;
        try {
            String tempDir = System.getProperty("java.io.tmpdir");
            log.info("获取本地临时目录:{}", tempDir);

            //第一步 下载pdf文件...
            for (PdfUrlDto url : pdfUrls) {
                URL pdfUrl = new URL(url.getUrl());
                String serialNo = getSerialNo();
                String pdfName = url.getContno() + '-' + serialNo + ".pdf";

                URLConnection connection = pdfUrl.openConnection();
                try (InputStream in = new BufferedInputStream(connection.getInputStream())) {
                    Path file = Paths.get(tempDir, pdfName);
                    Files.copy(in, file);
                    downloadedFiles.add(file.toFile());
                }
                log.info("将pdf名为:{},存入临时目录...", pdfName);
            }


            // 第二步  创建zip文件,并设置密码
            ZipFile zipFile = new ZipFile(tempDir + '/' + zipName, key.toCharArray());
            ZipParameters zipParameters = new ZipParameters();
            zipParameters.setEncryptFiles(true);
            zipParameters.setEncryptionMethod(EncryptionMethod.AES);
            zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);
            log.info("创建压缩包名为:{} ,并设置密码", zipName);

            //第三步  将下载的PDF文件添加到zip文件
            zipFile.addFiles(downloadedFiles, zipParameters);
            log.info("pdf下载完成并全部存入{}压缩包成功...", zipFile.getFile().toString());

       

            //第四步 上传数据到SFTP服务器
            src = new FileInputStream(zipFile.getFile());
            JSch jsch = new JSch();
            session = jsch.getSession(ftp.getFtpUsername(), ftp.getFtpIp(), Integer.parseInt(ftp.getFtpPort()));
            session.setPassword(ftp.getFtpPassword());
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect();
            channelSftp = (ChannelSftp) session.openChannel("sftp");
            channelSftp.connect();
            log.info("开始上传数据到SFTP服务器...");
            LocalDate today = LocalDate.now();
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
            String formattedDate = today.format(formatter);
            String remoteFilePath = '/' + ftp.getFtpBasePath() + '/' + ftp.getFtpPath() + '/' + formattedDate;
            // 删除原先目录
//            if(channelSftp.stat(remoteFilePath).isDir()){
//                channelSftp.rm(remoteFilePath + "/*");
//                channelSftp.rmdir(remoteFilePath);
//            }

            //没有目录再创建
            try {
                channelSftp.stat(remoteFilePath);
            } catch (SftpException e) {
                if (e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE) {
                    channelSftp.mkdir(remoteFilePath);
                    log.info("创建远程目录成功...");
                } else {
                    throw e;
                }
            }

            channelSftp.put(src, remoteFilePath + '/' + zipName);
            log.info("上传压缩包及txt文件到SFTP服务器成功....");

            //第五步 删除临时文件
            downloadedFiles.add(zipFile.getFile());
            for (File file : downloadedFiles) {
                file.delete();
            }
            log.info("删除临时目录文件成功....");
            return true;
        } catch (IOException | JSchException | SftpException e) {
            log.info("pdf下载并转换成zip文件失败:{}", e.getStackTrace());
            return false;
        } finally {
            if (channelSftp != null) {
                channelSftp.disconnect();
            }
            if (session != null) {
                session.disconnect();
            }
            try {
                if (src != null) {
                    src.close();
                }
            } catch (IOException e) {
                log.info(e.getMessage());
            }
        }
    }
}

主要实现是在downloadPdfFileToUploadToSFTP方法中:

这个方法实现了一个包含多个步骤的文件处理逻辑。首先,它将加密文件保存在临时目录中,并创建一个文件输入流以便后续操作。接着,利用JSch库建立SFTP会话,并将数据上传到SFTP服务器。在上传过程中,方法会根据需要创建远程目录,并将文件放置在指定的路径下。然后,方法会将临时文件(包括txt文件和zip文件)删除,以确保不会留下不必要的临时文件。

在整个方法的执行过程中,会捕获可能发生的IOException、JSchException和SftpException异常,并在发生异常时打印错误日志并返回false,表明操作未能成功完成。最后,无论是否发生异常,方法都会关闭SFTP通道和会话,并关闭文件输入流和写入器,以确保资源得到释放。

这个方法的最终目的是将加密文件成功地上传到SFTP服务器,并在完成上传后进行相应的清理工作

最后猜猜这是哪个动漫? qwq
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值