基于FTP服务器的文件下载出现的问题

由于项目部署在公司内网中,并且内网对外远程连接做了限制无法远程到服务器的情况下,开发人员抓取日志就比较麻烦了,每次都要找运维人员,就想着通过FTP服务器自主抓取日志提供下载,首先对创建FTP服务,我用的是FileZilla Server Interface,这个其它地方可以找到教程,添加ftp指向tomcat目录logs,action方法中提供日志名称,当然也可以循环取ftp目录下面所有文件,还有ip(服务器ip地址),ftp的用户名密码。实现层代码如下:

public class SystemlogServiceImp implements SystemlogService{
private Logger log = LoggerFactory.getLogger(this.getClass());
int port=21;
@Transactional(noRollbackFor=Exception.class)
public void uploadLog(Map<String, String> params,HttpServletResponse response) {
System.out.println("ftp下载接口");
FTPClient ftp = new FTPClient();
String fileName=params.get("fileName");
String ip=params.get("ip");
String username=params.get("username");
String password=params.get("password");
InputStream ins = null;
ServletOutputStream os=null;
    BufferedOutputStream bos=null;
    System.out.println("ip:"+ip+"---用户名:"+username+"---密码:"+password);
try {
ftp.connect(ip,port);
System.out.println("ftp连接成功");
ftp.login(username,password);
System.out.println("ftp登陆");
int replyCode = ftp.getReplyCode();
System.out.println("replyCode:"+replyCode);
if (!FTPReply.isPositiveCompletion(replyCode)) {
ftp.disconnect();
throw new RuntimeException("FTP连接失败");

}
System.out.print("ftp登陆成功");
ins=ftp.retrieveFileStream(fileName);
             os= response.getOutputStream();
             bos= new BufferedOutputStream(os);
             response.setHeader("Content-Disposition","attachment; filename=\""+ fileName + "\"");
             byte[]len= new byte[1024*2];
             int read= 0;
             while((read=ins.read(len)) != -1){
                  bos.write(len, 0, read);
                  System.out.println("read---"+read);
             }
             ftp.completePendingCommand();
             bos.flush();
             bos.close();
             ins.close();
             ftp.logout();
}
catch(Exception ex){throw new RuntimeException("FTP文件上传时出现错误", ex);
}

}


在过程中遇到一个问题抓取过去时间的日志正常,当日的日志信息出现0kb的情况,我考虑是不是代码有问题,在ftp测试手动拷贝的情况下,文件也是为空的,我猜测可能是文件还在占被用的问题,拷贝才会出现为空的情况,暂未找到解决方法,暂时记录一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值