日期:2014-05-19  浏览次数:20877 次

求解'Apache的FTPClient上传.gz文件解压失败'
用'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文件默认的方式应该问题不大。
如果是传输其它文件,可能是编码问题,可能造成文件传输损坏,所以用二进制方式最保险。