上传到服务器时 Zip 文件损坏

Posted

技术标签:

【中文标题】上传到服务器时 Zip 文件损坏【英文标题】:Zip file getting corrupted when uploaded to server 【发布时间】:2010-10-20 23:10:12 【问题描述】:

我的 java 程序将一个 zip 文件从我的系统上传到 FTP 服务器。 uploadfile()是一个包含上传代码的函数。

上传文件("192.168.0.210","muruganp","vm4snk","/home/Admin/GATE521/LN_RB_Semivalid2junk/Output/"+date+"_RB1.zip","/fileserver/filesbackup/Emac/"+日期+"_RB1.zip");

public static boolean uploadfile(String server, String username,
        String Password, String source_file_path, String dest_dir) 
    FTPClient ftp = new FTPClient();
    try 
        int reply;
        ftp.connect(server);
        ftp.login(username, Password);
        System.out.println("Connected to " + server + ".");
        System.out.print(ftp.getReplyString());
        reply = ftp.getReplyCode();
        if (!FTPReply.isPositiveCompletion(reply)) 
            ftp.disconnect();
            System.err.println("FTP server refused connection.");
            return false;
        
        System.out.println("FTP server connected.");
        InputStream input = new FileInputStream(source_file_path);
        ftp.storeFile(dest_dir, input);
        System.out.println(ftp.getReplyString());
        input.close();
        ftp.logout();
     catch (Exception e) 
        System.out.println("err");
        e.printStackTrace();
        return false;
     finally 
        if (ftp.isConnected()) 
            try 
                ftp.disconnect();
             catch (Exception ioe) 
        
    
    return true;

我系统中的 zip 文件是完美的。但是在服务器位置上传相同内容后,下载相同内容并提取问题。 “文件已损坏”表示错误。我应该怎么做才能解决这个问题。请就此提出建议。

我怀疑问题可能类似于通过 ASCII 模式传输。它实际上应该按照QUESTION 通过二进制模式传输。如何达到同样的效果?请指教。

【问题讨论】:

【参考方案1】:

最好的猜测是 FTP 上传使用的是 ascii 模式,这会损坏像 zip 这样的二进制文件。验证这一点,如果是,请将其更改为二进制模式。

【讨论】:

如何更改为二进制模式?我是java初学者..请解释一下 @LGAP - 您必须显示更多代码,您使用什么 API 来执行 FTP? 看起来像 commons-net,所以在传输之前使用 setFileType()。 我对 pdf 也有同样的问题。我将其设置为二进制。还是不行。 PDF 已损坏。 即使设置 FTP.BINARY_FILE_TYPE 我也遇到了同样的问题——这让我发疯了,直到我意识到它需要在你登录后设置,而不仅仅是在你连接到主机时【参考方案2】:

上传前使用FTPClient的setFileType方法设置为FTP.BINARY_FILE_TYPE

【讨论】:

【参考方案3】:

我刚刚用setFileType(FTP.BINARY_FILE_TYPE)解决了。 这些信息真的很有帮助!非常感谢。

【讨论】:

以上是关于上传到服务器时 Zip 文件损坏的主要内容,如果未能解决你的问题,请参考以下文章

Zip文件在接收时损坏

laravel 存储文件夹在服务器上上传时转换为文件

使用无服务器框架上传时文件在 S3 上损坏

Apache Commons Net FTP 正在上传损坏的文件

FTPClient 在上传到 android 上的 ftp 服务器时损坏图像?

使用日语文件名的 PHP 文件上传在数据库中变成损坏的文件名