首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FTP客户端问题

FTP客户端问题
EN

Stack Overflow用户
提问于 2011-09-09 09:25:04
回答 2查看 4.6K关注 0票数 1

我很难搞清楚一些事情。(我对这一切都是新手。)我写这个java pgm是为了把一个大文件ftp到目的服务器上。以下是代码(代码为显示做了一些修改):

代码语言:javascript
复制
public static void ftpUpload(String path, String upfileName, String dirName) throws Exception
{
    FTPClient client = new FTPClient();
    client.addProtocolCommandListener((ProtocolCommandListener) new PrintCommandListener(new PrintWriter(System.out)));
    client.enterLocalPassiveMode();

    FileInputStream fis = null;

    int reply;

    try {
        client.connect(ftpserver);
        client.login(ftpuserid, ftppasswd);
        reply = client.getReplyCode();

        if(FTPReply.isPositiveCompletion(reply)){
            client.changeWorkingDirectory(ftpdirectoryName + "/" + dirName);

            boolean mkDir = client.makeDirectory(getCurrentMMMYY().toLowerCase());

            client.changeWorkingDirectory(getCurrentMMMYY().toLowerCase());

              //Create an InputStream of the file to be uploaded
            fis = new FileInputStream(path + upfileName);

            //Store file to server
            client.storeFile(upfileName, fis);

        }    
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (fis != null) {
                fis.close();
            }
            client.logout();
            //client.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

我正在发送的文件发生了一些奇怪的事情...我在源服务器上的一个文件是82575786大小,当我通过ftp传输这个文件时,它几乎会发送整个文件。它实际上发送了82574867。源服务器上的另一个文件是717885,当我通过ftp传输此文件时,它几乎会发送整个文件。它实际上发送了717522。(缺少363)

我查看了日志,看是否有什么东西崩溃了,但它没有显示传输有任何问题。以下是显示传输的2个日志条目。

08/09/11 20:21:13:618EDT 00000043 SystemOut O 221-您已在1个文件中传输了717522字节。221-您已在%1个文件中传输了82574867字节。

任何人的帮助都将不胜感激。谢谢,丹。

EN

回答 2

Stack Overflow用户

发布于 2011-09-09 09:32:21

您是否以ASCII模式而不是二进制模式进行传输?ASCII模式根据服务器和客户端设置将CR/LF转换为LF,反之亦然。

您是否在使用Apache's FTP客户端?它说默认值是ASCII码,你可以尝试用setFileType设置BINARY_FILE_TYPE

代码语言:javascript
复制
client.setFileType(FTPClient.BINARY_FILE_TYPE);
票数 3
EN

Stack Overflow用户

发布于 2011-10-19 23:05:20

要上传二进制文件,您必须使用FTP.BINARY_FILE_TYPE,但这还不够。

您只使用了一个输入流,并且还需要使用一个输出流

我希望这个例子能帮助你:

代码语言:javascript
复制
FTPClient client = new FTPClient();
client.connect("192.168.30.20");
client.login("pwd", "pwd");

client.setFileType(FTP.BINARY_FILE_TYPE);
String path_base = "/myPath/";
InputStream fis = new FileInputStream("A.pdf");
OutputStream os = client.storeFileStream(path_base+ "B.pdf");


byte buf[] = new byte[8192];
int bytesRead = fis.read(buf);
while (bytesRead != -1) {
   os.write(buf, 0, bytesRead);
   bytesRead = fis.read(buf);}

fis.close();
os.close();
client.completePendingCommand();
client.logout();
client.disconnect();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7356233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档