sftp上传文件,通过nginx下载文件java实现

ChannelSftp类是JSch实现SFTP核心类,它包含了所有SFTP的方法,如:

put():      文件上传

get():      文件下载

cd():       进入指定目录

ls():       得到指定目录下的文件列表

rename():   重命名指定文件或目录

rm():       删除指定文件

mkdir():    创建目录

rmdir():    删除目录

    /**
     * 文件上传
     * @param basePath SFTP服务器上传的目录
     * @param fileName 文件名
     * @param input    输入流
     * @throws Exception 
     */
    public boolean upload(String directory,String fileName, InputStream input) throws Exception {  
    	try{
    		sftp.cd(directory); //进入目录
    	}catch(SftpException sException){
    		if(sftp.SSH_FX_NO_SUCH_FILE == sException.id){ //指定上传路径不存在
                sftp.mkdir(directory);//创建目录
                sftp.cd(directory);  //进入目录
            }
    	}
    	boolean flag = true;
    	try {
			sftp.put(input, fileName);  //上传文件
		} catch (Exception e) {
			flag = false;
			e.printStackTrace();
		}
    	return flag;
    }
    /**
	 * 如果SFTP器配置Nginx,可通过URL路径直接下载文件
	 * @param url               文件访问路径
	 * @param realName          文件名称
	 * @param request
	 * @param response
	 * @throws IOException
	 */
	public void fileDownNg(String url, String realName, HttpServletRequest request, HttpServletResponse response) throws IOException {
		BufferedInputStream dis = null;
        BufferedOutputStream fos = null;

        try {
        	String srtname = url.substring(url.lastIndexOf("/") + 1);
        	url = url.substring(0,url.lastIndexOf("/"))+"/"+URLEncoder.encode(srtname,"utf-8");
            URL httpUrl = new URL(url);
            response.setContentType("application/x-msdownload;");
            response.setHeader("Content-disposition", "attachment; filename=" + new String(realName.getBytes("UTF-8"), "ISO-8859-1"));
            response.setHeader("Content-Length", String.valueOf(httpUrl.openConnection().getContentLength()));

            dis = new BufferedInputStream(httpUrl.openStream());
            fos = new BufferedOutputStream(response.getOutputStream());

            byte[] buff = new byte[1024];
            int bytesRead;
            while (-1 != (bytesRead = dis.read(buff, 0, buff.length))) {
                fos.write(buff, 0, bytesRead);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (dis != null)
                dis.close();
            if (fos != null)
                fos.close();
        }
	}
	/**
	 * 获取文件流
	 * @param directory
	 * @param downloadFile
	 * @return
	 */
	public InputStream getFile(String directory, String downloadFile) {
		InputStream is = null;
		try {
			sftp.cd(directory);
			is = sftp.get(downloadFile);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return is;
    }

这里只是简单的应用,更详细的讲解可以看下面的地址

http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值