用'Apache的FTPClient上传.gz文件至linux系统后,用gunzip命令进行解压报错,请大侠给个明确解释!
如下:
gunzip xxx.csv.gz
gunzip: xxx.csv.gz: invalid compressed data--crc error
gunzip: xxx.csv.gz: invalid compressed data--length error
- Java code
/** * 向FTP服务器上传文件 * * @param url * FTP服务器IP * @param port * FTP服务器端口 * @param username * FTP登录账号 * @param password * FTP登录密码 * @param path * FTP服务器保存目录 * @param filename * 上传到FTP服务器上的文件名 * @param input * 输入流 * @return 成功返回true,否则返回false */ public static boolean uploadFile(String url, int port, String username, String password, String path, String filename, InputStream input) { boolean success = false; FTPClient ftp = new FTPClient(); try { // 设置以二进制方式传输 //ftp.setFileType(FTP.BINARY_FILE_TYPE); ftp.enterLocalPassiveMode();//设置被动模式 int reply; ftp.connect(url, port); // 登录 ftp.login(username, password); reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); return success; } // 找到目标路径 ftp.changeWorkingDirectory(path); // 储藏 ftp.storeFile(filename, input); input.close(); ftp.logout(); success = true; } catch (IOException e) { logger.error("向FTP服务器上传文件异常:", e); } finally { if (ftp.isConnected()) { try { ftp.disconnect(); } catch (IOException ioe) { } } } return success; }
------解决方案--------------------
- Java code
// 设置以二进制方式传输//ftp.setFileType(FTP.BINARY_FILE_TYPE);
------解决方案--------------------
FTPClient默认传输是ASCII模式,简单的txt文件默认的方式应该问题不大。
如果是传输其它文件,可能是编码问题,可能造成文件传输损坏,所以用二进制方式最保险。