繁体   English   中英

如何使用java上传多个文件

[英]how to upload multiple files using java

我希望有人可以帮助我(再一次)。

我有非常多的smmll文件(超过4000),每个只有几K.我已经在java中编写了一个FTP程序,它将单独传输每个文件,但这需要很长时间。 此外,握手开销似乎也使问题变得更糟。

我希望能够做的是打开FTP连接发送所有文件然后再次关闭它。

我知道这在FTP中是可能的,但是如何在java中实现这一点已经超出了我的范围。

我目前在数组中有文件名,因此解析它们没有问题。 我试过调用下面的类并传递文件名,但几个小时后它仍然每秒移动大约1个文件。

    package website;

    import java.io.BufferedOutputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;

    public class ftpUpload {

public ftpUpload(String target, String savename, String localFilePath) {

    URL url;
    try {
        url = new URL(target + savename + ";type=i");

        URLConnection con = url.openConnection();
        BufferedOutputStream out = 
            new BufferedOutputStream(con.getOutputStream());
        FileInputStream in = 
            new FileInputStream(localFilePath + savename);

        int i = 0;
        byte[] bytesIn = new byte[1024];
        while ((i = in.read(bytesIn)) >= 0) {
            out.write(bytesIn, 0, i);
        }
        out.close();
        in.close();

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

    }

有没有办法可以打开与ftp站点用户名和密码的连接,然后发送文件,最后关闭连接?

这似乎比创建多个线程同时发送文件更容易。

任何建议都很受欢迎。

保罗

我不认为使用URLConnection在一个会话中发送多个文件是可能的,这意味着您将获得为每个文件打开和关闭会话的开销。

来自commons net的 FTPClient在一个会话中支持多个操作。 例如(省略异常处理):

FTPClient ftp = new FTPClient();
ftp.connect("ftp.example.com");
ftp.login("admin", "secret");
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

for(File file : files) {
    InputStream in = new FileInputStream(file);
    ftp.storeFile(file.getName(), in);
    in.close();
}

ftp.disconnect();

这应该有所帮助。

如果您仍然需要更好的性能,除了使用多个线程之外,我没有看到任何其他选择。

经过大量测试后,我发现了多个ftp线程到公共服务器的可靠性问题,这是我在这种情况下所需要的。 大多数(如果不是全部)ftp服务器限制最大连接数,并限制来自同一IP地址的最大并发连接数。 来自同一IP的两个并发连接似乎是允许的唯一保证最大值。 上面建议的现实选项是压缩文件和ftp单个文件。 你可以使用php脚本解压缩文件(只要服务器支持解压缩,你需要检查它是否包含在php版本中)。 最后,如果像我这样你需要上传超过10,000个文件,许多ftp服务器将不会显示超过9998个文件(10,000个包含。和..)如果有人知道一个免费或便宜的ftp服务器支持在php构建中的ZipArchive并将在ftp中请求文件列表时,列出超过9998个文件,请您告诉我.....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM