Java 传输到ftp服务器时,文件内容会减少

Java 传输到ftp服务器时,文件内容会减少,java,binary-data,ftp-client,Java,Binary Data,Ftp Client,我编写了一个java程序,使用Apache.commons.net库递归地将目录上载到远程ftp服务器。通过该程序,所有文件都按预期上载到远程ftp服务器。但是一些html、js、svg、ftl文件内容减少了。还有一些jpeg、png、,图标文件大小与原始文件不同。我在使用meld软件上载后比较原始目录和上载的目录,以便找出目录内容已损坏。我尝试了二进制和ASCII传输模式。这两种模式都遇到了相同的问题。因此,任何一种模式都能说明发生这种情况的原因。这是一种错误吗ftp文件传输问题 import

我编写了一个java程序,使用Apache.commons.net库递归地将目录上载到远程ftp服务器。通过该程序,所有文件都按预期上载到远程ftp服务器。但是一些html、js、svg、ftl文件内容减少了。还有一些jpeg、png、,图标文件大小与原始文件不同。我在使用meld软件上载后比较原始目录和上载的目录,以便找出目录内容已损坏。我尝试了二进制和ASCII传输模式。这两种模式都遇到了相同的问题。因此,任何一种模式都能说明发生这种情况的原因。这是一种错误吗ftp文件传输问题

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;




public class FtpClient3 {

public static boolean uploadSingleFile(FTPClient ftpClient,
                                       String localFilePath, String   remoteFilePath) throws IOException {
    File localFile = new File(localFilePath);

    InputStream inputStream = new FileInputStream(localFile);
    String ext1 = FilenameUtils.getExtension(localFilePath);
    try {
        if(ext1== "ajx" || ext1== "am" || ext1=="asa" ||     ext1=="properties" || ext1=="asc" || ext1=="asp" || ext1=="aspx" || ext1=="awk"  || ext1=="bat" || ext1=="c" || ext1=="cdf" || ext1=="cf" || ext1=="cfg" || ext1=="cfm" || ext1=="cgi" || ext1=="cnf" || ext1=="conf" || ext1=="cpp" || ext1=="css" || ext1=="csv" || ext1=="ctl" || ext1=="dat" || ext1=="dhtml"|| ext1=="diz" || ext1=="file" || ext1=="forward" || ext1=="grp" || ext1=="h" || ext1=="hpp"|| ext1=="hqx" || ext1=="hta" || ext1=="htaccess" || ext1=="htc" || ext1=="htm" || ext1=="html" || ext1=="htpasswd" || ext1=="htt" || ext1=="htx"|| ext1=="in"|| ext1=="inc"|| ext1=="info"|| ext1=="ini"|| ext1=="ink"|| ext1=="java" || ext1=="js" || ext1=="jsp" || ext1=="log" || ext1=="logfile"|| ext1=="m3u"|| ext1=="m4a"|| ext1=="m4a"|| ext1=="mak"|| ext1=="map"|| ext1=="model"|| ext1=="msg"|| ext1=="nfo"|| ext1=="nsi" || ext1=="info"  || ext1=="old" || ext1=="pas" || ext1=="patch" || ext1=="perl" || ext1=="php"|| ext1=="php2"|| ext1=="php3" || ext1=="php4" || ext1=="php5" || ext1=="php6" || ext1=="phtml" || ext1=="pix" || ext1=="pl" || ext1=="pm" || ext1=="po"|| ext1=="pwd"|| ext1=="py" || ext1=="qmail" || ext1=="rb" || ext1=="rbl" || ext1=="rbw" || ext1=="readme" || ext1=="reg" || ext1=="rss" || ext1=="ruby" || ext1=="session" || ext1=="setup" || ext1=="sh" || ext1=="shtm"  || ext1=="shtml" || ext1=="sql" || ext1=="ssh" || ext1=="stm" || ext1=="style" || ext1=="svg" || ext1=="tcl" || ext1=="text" || ext1=="threads" || ext1=="tmpl" || ext1=="tpl" || ext1=="txt" || ext1=="ubb" || ext1=="vbs" || ext1=="xhtml" || ext1=="xml" || ext1=="xrc" || ext1=="xsl" || ext1=="rtf"){
        ftpClient.setFileType(FTP.ASCII_FILE_TYPE);
        ftpClient.setFileTransferMode(ftpClient.ASCII_FILE_TYPE);
            }
        else{
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            ftpClient.setFileTransferMode(ftpClient.BINARY_FILE_TYPE);
        }


        return ftpClient.storeFile(remoteFilePath, inputStream);
    } catch (Exception e) {
        System.out.println("error: " + e.getMessage());
        e.printStackTrace();
        throw e;
    } finally {
        inputStream.close();
    }
}







public static void uploadDirectory(FTPClient ftpClient,
                                   String remoteDirPath, String  localParentDir, String remoteParentDir)
        throws IOException {

    System.out.println("LISTING directory: " + localParentDir);

    File localDir = new File(localParentDir);
    File[] subFiles = localDir.listFiles();
    if (subFiles != null && subFiles.length > 0) {
        for (File item : subFiles) {
            String remoteFilePath = remoteDirPath + "/" + remoteParentDir
                    + "/" + item.getName();
            if (remoteParentDir.equals("")) {
                remoteFilePath = remoteDirPath + "/" + item.getName();
            }


            if (item.isFile()) {
                // upload the file
                String localFilePath = item.getAbsolutePath();
                System.out.println("About to upload the file: " + localFilePath);
                //CHANGING
                boolean uploaded = uploadSingleFile(ftpClient,
                        localFilePath, remoteFilePath);
                if (uploaded) {
                    System.out.println("UPLOADED a file to: "
                            + remoteFilePath);
                } else {
                    System.out.println("COULD NOT upload the file: "
                            + localFilePath);
                }
            } else {
                // create directory on the server
                boolean created = ftpClient.makeDirectory(remoteFilePath);
                if (created) {
                    System.out.println("CREATED the directory: "
                            + remoteFilePath);
                } else {
                    System.out.println("COULD NOT create the directory: "
                            + remoteFilePath);
                }

                // upload the sub directory
                String parent = remoteParentDir + "/" + item.getName();
                if (remoteParentDir.equals("")) {
                    parent = item.getName();
                }

                localParentDir = item.getAbsolutePath();
                uploadDirectory(ftpClient, remoteDirPath, localParentDir,
                        parent);
            }
        }
    }
}






public static void main(String args[])throws Exception{

    String server = "";
    int port = 21;
    String user = "";
    String pass = "";




    FTPClient ftpclient = new FTPClient();


   try {
        // connect and login to the server
        ftpclient.connect(server, port);
        ftpclient.login(user, pass);

        // use local passive mode to pass firewall
        ftpclient.enterLocalPassiveMode();

        System.out.println("Connected");

        String remoteDirPath = "/dist";
        String localDirPath ="/data/IOT/ase-core";


        FtpClient3.uploadDirectory(ftpclient, remoteDirPath, localDirPath, "");

        // log out and disconnect from the server
        ftpclient.logout();
        ftpclient.disconnect();

        System.out.println("Disconnected");
    } catch (IOException ex) {
        ex.printStackTrace();
    }

  }

}

您是否以二进制模式传输?有一次我错误地以ASCII模式传输,它破坏了每个文件。您应该发布用于将文件上载到服务器的代码以回答更新:不,这不是FTP文件传输的问题。再次,发布您的代码。是的,首先我尝试了二进制模式,但文件内容减少了,因此我决定根据文件类型更改模式。这将文本文件的模式设置为ASCII,其他图像文件(如JPEG、PNG)设置为二进制模式,但同样的问题再次出现在您的代码中。在问题中包括它,否则我们将无法帮助您是的,我包括它您是以二进制模式传输吗?有一次我错误地以ASCII模式传输,它破坏了每个文件。您应该发布用于将文件上载到服务器的代码以回答更新:不,这不是FTP文件传输的问题。再次,发布您的代码。是的,首先我尝试了二进制模式,但文件内容减少了,因此我决定根据文件类型更改模式。这将文本文件的模式设置为ASCII,其他图像文件(如JPEG、PNG)设置为二进制模式,但同样的问题再次出现在您的代码中。把它包括在问题里,否则我们帮不了你是的,我包括在内了