您的位置:首页 > 编程语言 > PHP开发

sftp 下载 批量下载,单个下载,工具类

2016-06-17 13:31 495 查看
fileToZIPAndUpload :

package com.utils;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.List;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import com.jcraft.jsch.ChannelSftp;

import com.jcraft.jsch.SftpException;

import com.xmjr.constants.Constants;

public class fileToZIPAndUpload {

    private static Log log = LogFactory.getLog(fileToZIPAndUpload.class);

    /**

     * <p>

     * 从sftp批量下载资料<br>

     * </p>

     * <p>

     * -----版本-----变更日期-----责任人-----变更内容<br>

     * ─────────────────────────────────────<br>

     * @param fileNameList

     *            下载文件名称list<String>

     * @param response

     * @return List<String>

     * @throws IOException

     *        </p>

     */

    public static List<String> batchDownload(List<String> fileNameList, HttpServletResponse response)

            throws IOException {

        List<String> resultList = new ArrayList<String>();

        ChannelSftp sftpConn = SftpClientUtil.connect(HOST, PORT, USER_NAME, PASSWORD);

        if (sftpConn == null) {

            resultList.add("下载服务链接失败!");

            return resultList;

        }

        try {

            sftpConn.cd(UPLOAD_PATH);

        } catch (SftpException e) {

            resultList.add("资料目录不存在!");

            return resultList;

        }

        File zipFile = new File("batchDownload_yingxiangziliao.zip");

        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile));

        byte[] buf = new byte[1024];

        for (String fileName : fileNameList) {

            if (fileName != null) {

                InputStream in = null;

                try {

                    in = sftpConn.get(fileName);

                } catch (SftpException e) {

                    e.printStackTrace();

                    resultList.add(fileName + "下载失败,资料不存在!");

                    return resultList;

                }

                out.putNextEntry(new ZipEntry(fileName));

                int len;

                while ((len = in.read(buf)) > 0) {

                    out.write(buf, 0, len);

                }

                out.closeEntry();

                in.close();

            }

        }

        out.close();

        response.setHeader("Content-Disposition", "attachment;fileName="

                + new String(zipFile.getName().getBytes("GBK"), "ISO8859-1"));

        response.setContentType("application/x-download");

        OutputStream ot = response.getOutputStream();

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(zipFile));

        BufferedOutputStream bos = new BufferedOutputStream(ot);

        int length = 0;

        while ((length = bis.read(buf)) > 0) {

            bos.write(buf, 0, length);

        }

        bos.close();

        bis.close();

        ot.close();

        zipFile.delete();

        return resultList;

    }

    public static void deleteAndUpload(String yydk_pdf_reupload_path, String aplyno, String tranno)

            throws Exception {

        try {

            ChannelSftp sftpConn = SftpClientUtil.connect(HOST, PORT, USER_NAME, PASSWORD);

            // 需要删除的压缩包名

            String delZipName = aplyno + SPLIT_REGEX + tranno + SUFFIX;

            log.info("deleteAndUpload删除: " + delZipName);

            // 删除服务器的压缩文件

            SftpClientUtil.delete(UPLOAD_PATH, delZipName, sftpConn);

            // 从应用服务器上传到服务器

            String zipName = yydk_pdf_reupload_path + aplyno + SPLIT_REGEX + tranno + SUFFIX;

            log.info("deleteAndUpload上传: " + zipName);

            boolean uploadToYyFlag = SftpClientUtil.upload(UPLOAD_PATH, zipName, sftpConn);

            if (!uploadToYyFlag) {

                log.error("上传资料到有氧服务器失败!");

                throw new Exception("上传资料到服务器失败!");

            }

        } catch (Exception e) {

            log.error("上传影音资料出错," + e.getMessage());

            e.printStackTrace();

            throw new Exception(e.getMessage());

        }

    }

    /**

     * <p>

     * 从sftp单个下载资料<br>

     * </p>

     * <p>

     * -----版本-----变更日期-----责任人-----变更内容<br>

     *

     * @param fileName

     *            下载的文件名称(包含后缀名)

     * @param response

     * @return String

     *        </p>

     */

    public static String download(String fileName, HttpServletResponse response) {

        ChannelSftp sftpConn = SftpClientUtil.connect(HOST, PORT, USER_NAME, PASSWORD);

        if (sftpConn == null) {

            return "链接失败";

        }

        File zipFile = new File(fileName);

        byte[] buf = new byte[1024];

        try {

            sftpConn.cd(UPLOAD_PATH);

            InputStream in = sftpConn.get(fileName);

            response.setHeader("Content-Disposition", "attachment;fileName="

                    + new String(zipFile.getName().getBytes("GBK"), "ISO8859-1"));

            response.setContentType("application/x-download");

            OutputStream ot = response.getOutputStream();

            BufferedInputStream bis = new BufferedInputStream(in);

            BufferedOutputStream bos = new BufferedOutputStream(ot);

            int length = 0;

            while ((length = bis.read(buf)) > 0) {

                bos.write(buf, 0, length);

            }

            bos.close();

            bis.close();

            ot.close();

            zipFile.delete();

        } catch (SftpException e) {

            return "下载失败,资料不存在!";

        } catch (Exception e) {

            e.printStackTrace();

            e.getMessage();

        } finally {

            sftpConn.quit();

        }

        return null;

    }

    /**

     * <p>

     * 补传资料文件<br>

     * </p>

     * <p>

     * -----版本-----变更日期-----责任人-----变更内容<br>

     *

     * @param yydk_pdf_reupload_path

     * @param aplyno

     * @param tranno

     * @throws Exception

     *             void

     *        </p>

     */

    public static void Upload(String yydk_pdf_reupload_path, String fileName) throws Exception {

        try {

            ChannelSftp sftpConn = SftpClientUtil.connect(HOST, PORT, USER_NAME, PASSWORD);

            // 从应用服务器上传到服务器

            String zipName = _pdf_reupload_path + fileName;

            log.info("Upload上传: " + zipName);

            boolean uploadToYyFlag = SftpClientUtil.upload(UPLOAD_PATH, zipName, sftpConn);

            if (!uploadToYyFlag) {

                log.error("上传资料到服务器失败!");

                throw new Exception("上传影音资料到有氧服务器失败!");

            }

        } catch (Exception e) {

            log.error("上传资料出错," + e.getMessage());

            e.printStackTrace();

            throw new Exception(e.getMessage());

        }

    }

    /**

     * <p>

     * 申请发送失败后,重新命名流水号后,删除原资料压缩包,再按新的流水号打包上传资料<br>

     * </p>

     * <p>

     * -----版本-----变更日期-----责任人-----变更内容<br>

     * ─────────────────────────────────────<br>

     * V1.0.0 2016年02月19日 hanfajie 初版<br>

     *

     * @param aplyno

     *            the 唯一申请编号.

     * @param suffix

     *            the 新流水号后缀当前时间戳.

     * @param oldTranno

     *            the 原流水号.

     * @throws Exception

     *             void

     *        </p>

     */

    public static void zipAndUpload(String aplyno, String suffix, String oldTranno)

            throws Exception {

        try {

            // 重命名需要修改流水号的对应的资料

            ChannelSftp sftpConn = SftpClientUtil.connect(HOST, PORT, USER_NAME, PASSWORD);

            String oldZipName = aplyno + SPLIT_REGEX + oldTranno + SUFFIX;

            String newZipName = aplyno + SPLIT_REGEX + aplyno + suffix + SUFFIX;

            // 存在则重命名成功,不存在或者其他异常则重命名失败,即重新上上传

            boolean flag = SftpClientUtil.rename(UPLOAD_PATH, oldZipName, newZipName, sftpConn);

            if (!flag) {

                // 获得影像资料路径

                String imagePathString = XEDK_IMAGE_PATH + aplyno;

                // 判断是否存在资料

                File file = new File(imagePathString);

                if (!file.exists() || !file.isDirectory() || file.listFiles().length == 0) {

                    throw new Exception("资料不存在,请检查!");

                }

                // 压缩资料路径+名

                String zipName = XEDK_IMAGE_ZIP_PATH + aplyno + SPLIT_REGEX + aplyno + suffix

                        + SUFFIX;

                // 资料压缩后不带文件名

                ZIPUtil.createZip(imagePathString, zipName, 1);

                boolean uploadFlag = SftpClientUtil.upload(UPLOAD_PATH, zipName, sftpConn);

                if (!uploadFlag) {

                    log.error("上传资料失败!");

                    throw new Exception("上传资料失败!");

                }

            }

        } catch (Exception e) {

            log.error("上传资料出错," + e.getMessage());

            e.printStackTrace();

            throw new Exception(e.getMessage());

        }

    }
}

调用:

 @Override

    public String download(String loanApplyIdArr, HttpServletResponse response) {

        // TODO Auto-generated method stub

        String[] loanApplyIdstr = loanApplyIdArr.split(",");

        Long[] loanApplyIds = new Long[loanApplyIdstr.length];

        int i = 0;

        for (String loanApplyId : loanApplyIdstr) {

            loanApplyIds[i++] = Long.parseLong(loanApplyId);

        }

        List<Map<String, Object>> loanApplyList = YYDKDaoMapper

                .selectLoanApplyInfoById(loanApplyIds);

        if (loanApplyList != null && !loanApplyList.isEmpty() && loanApplyList.size() > 0) {

            List<String> fileNameList = new ArrayList<String>();

            String fileName = null;

            for (Map<String, Object> loanApply : loanApplyList) {

                fileName = loanApply.get("aplyno").toString() + "_"

                        + loanApply.get("tranno").toString() + ".zip";

                fileNameList.add(fileName);

            }

            if (fileNameList != null && !fileNameList.isEmpty() && fileNameList.size() > 0) {

                if (fileNameList.size() == 1) {

                    return fileToZIPAndUpload.download(fileNameList.get(0), response);

                } else {

                    try {

                        List<String> resultList = fileToZIPAndUpload.batchDownload(fileNameList,

                                response);

                        if (resultList != null && !resultList.isEmpty() && resultList.size() > 0) {

                            return resultList.toString();

                        }

                    } catch (IOException e) {

                        // TODO Auto-generated catch block

                        e.printStackTrace();

                        return "资料批量下载失败,请重试!";

                    }

                }

            }

        }

        return null;

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息