使用Java上传到FTP

时间:2013-07-03 17:29:03

标签: java ftp uploading

我只是想知道是否有一种简单方式我可以将一个小文件上传到ftp服务器。我已经检查了Apache Commons Net库,但说实话这似乎很复杂。有没有更简单的方法将小文件上传到ftp?

使用Apache Commons Net Library结束,并不太难。

3 个答案:

答案 0 :(得分:19)

从此链接:Upload files to FTP server using URLConnection class。无需外部库。

String ftpUrl = "ftp://%s:%s@%s/%s;type=i";
String host = "www.myserver.com";
String user = "tom";
String pass = "secret";
String filePath = "E:/Work/Project.zip";
String uploadPath = "/MyProjects/archive/Project.zip";

ftpUrl = String.format(ftpUrl, user, pass, host, uploadPath);
System.out.println("Upload URL: " + ftpUrl);

try {
    URL url = new URL(ftpUrl);
    URLConnection conn = url.openConnection();
    OutputStream outputStream = conn.getOutputStream();
    FileInputStream inputStream = new FileInputStream(filePath);

    byte[] buffer = new byte[BUFFER_SIZE];
    int bytesRead = -1;
    while ((bytesRead = inputStream.read(buffer)) != -1) {
        outputStream.write(buffer, 0, bytesRead);
    }

    inputStream.close();
    outputStream.close();

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

答案 1 :(得分:2)

使用Apache commons lib有这个实用程序org.apache.commons.net.ftp.FTPClient:

http://commons.apache.org/

import org.apache.commons.net.ftp.FTPClient;
FTPClient client = new FTPClient();
String sFTP = "ftp.miservidor.com";
String sUser = "usuario";
String sPassword = "password";

try {
    client.connect(sFTP);
    boolean login = client.login(sUser,sPassword);
} catch (IOException ioe) {}

完整示例:http://www.google.es/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CD8QFjAB&url=http%3A%2F%2Fcommons.apache.org%2Fproper%2Fcommons-net%2Fexamples%2Fftp%2FFTPClientExample.java&ei=JGLUUdsrotHsBtj9gNgI&usg=AFQjCNHymPhHZOKh2S4yuLMTYHTVTnQ02g&sig2=8kJSz_Gl-vsPECe8sIxLGA&bvm=bv.48705608,d.ZGU&cad=rja

答案 2 :(得分:1)

我想,我发现了一个使用 org.apache.commons.net.ftp.FTPClient here的非常好的样本

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;

/**
 * A program that demonstrates how to upload files from local computer
 * to a remote FTP server using Apache Commons Net API.
 * @author www.codejava.net
 */
public class FTPUploadFileDemo {

    public static void main(String[] args) {
        String server = "www.myserver.com";
        int port = 21;
        String user = "user";
        String pass = "pass";

        FTPClient ftpClient = new FTPClient();
        try {

            ftpClient.connect(server, port);
            ftpClient.login(user, pass);
            ftpClient.enterLocalPassiveMode();

            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

            // APPROACH #1: uploads first file using an InputStream
            File firstLocalFile = new File("D:/Test/Projects.zip");

            String firstRemoteFile = "Projects.zip";
            InputStream inputStream = new FileInputStream(firstLocalFile);

            System.out.println("Start uploading first file");
            boolean done = ftpClient.storeFile(firstRemoteFile, inputStream);
            inputStream.close();
            if (done) {
                System.out.println("The first file is uploaded successfully.");
            }

            // APPROACH #2: uploads second file using an OutputStream
            File secondLocalFile = new File("E:/Test/Report.doc");
            String secondRemoteFile = "test/Report.doc";
            inputStream = new FileInputStream(secondLocalFile);

            System.out.println("Start uploading second file");
            OutputStream outputStream = ftpClient.storeFileStream(secondRemoteFile);
            byte[] bytesIn = new byte[4096];
            int read = 0;

            while ((read = inputStream.read(bytesIn)) != -1) {
                outputStream.write(bytesIn, 0, read);
            }
            inputStream.close();
            outputStream.close();

            boolean completed = ftpClient.completePendingCommand();
            if (completed) {
                System.out.println("The second file is uploaded successfully.");
            }

        } catch (IOException ex) {
            System.out.println("Error: " + ex.getMessage());
            ex.printStackTrace();
        } finally {
            try {
                if (ftpClient.isConnected()) {
                    ftpClient.logout();
                    ftpClient.disconnect();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

}