使用 Java 将文件上传到 FTP 服务器
要编写将文件从本地磁盘上传到在线 FTP 服务器的 Java 代码,Apache Commons Net API 是 Java 开发人员的一个非常好的选择。它很简单,使使用 FTP 编程变得容易。
此代码显示如何使用以下两种方法将文件从机器发送到 FTP 服务器:
1- 下载 Apache Commons Net
API下载 Apache Commons Net API 它包含一组网络工具并支持多种协议,例如:FTP、Telnet、SMTP......上传后,.jar 文件应嵌入到项目的 classpath.
2- 用于通过 FTP
类 FTP 提供了通过 FTP:- boolean storeFile(String remote, InputStream local)
- OutputStream storeFileStream(String remote)
- boolean storeUniqueFile(InputStream local)
- boolean storeUniqueFile(String remote, InputStream local)
- OutputStream storeUniqueFileStream()
- OutputStream storeUniqueFileStream(String remote)
- 通过给 a InputStream 的本地文件(这些是具有 InputStream 作为参数)。当您不需要知道如何操作时,会采用这种类型的方法。 字节 从本地文件传输到服务器。我们让系统来做这件事。processing.
- 通过写入 来存储文件输出流 (这些是将 OutputStream 作为输出的方法)。当您想要控制字节的使用方式时,这些类型的方法是必需的。是 转发,通过编写我们自己的代码来读取字节 通过将保存在远程文件路径中的本地文件,通过对象 OutputStream。如果您想显示进展 ,计算在文件大小上传输了多少字节 .
- 清楚地命名远程文件(那些接受名为 remote 的 String 参数的方法)。
- 将服务器名称和远程文件保留为唯一名称(这些没有 String 参数的方法)。
尽管这些方法很复杂, 在实践中主要使用两种方法:
- boolean storeFile(String remote,InputStream local)
- OutputStream storeFileStream(String remote)
除了这六种方法,还有另外两种方法需要在文件下载前后调用:
- boolean setFileType(int fileType):确定文件的类型,即FTP的。ASCII_FILE_TYPE 或 FTP。BINARY_FILE_TYPE,用于传输文件。默认类型是 ASCII(纯文本),但必须将其设为二进制文件才能适用于所有文件。在文件传输开始之前,必须调用此方法。
- boolean completePendingCommand():下载完成后必须调用该方法才能完成事务。她回来了true 如果转移成功完成,如果没有;false。必须检查此方法的返回值,以确保上传已发生。
默认情况下,FTP 通过为客户端打开一个端口来建立连接,并允许服务器连接到该端口。这是活动模式,但有时会被防火墙阻止,文件传输不起作用。幸运的是,FTP协议还有另一种模式,即建立连接的被动模式,通过在服务器中打开一个端口供客户端连接。此模式不会被防火墙阻止。
因此,建议在数据传输开始之前通过调用 FTPClient 类方法切换到被动模式 enterLocalPassiveMode().
3- 在 Java
中传输文件的步骤要正确编写代码以使用 Apache Commons Net API 将文件传输到 FTP 服务器,必须遵循以下步骤:
- 连接并登录服务器。
- 连接使用被动模式。
- 修改要传输的文件类型。
- 创建 InputStream 对于本地文件.
- 调用以下方法之一 商店...()开始传输文件。有两种场景:
- 使用 InputStream:这是最简单的方法,因为您让系统负责发送和接收。没有额外的代码,只需传递项目即可InputStream 在相应的方法中,例如 storeFile(String remote, InputStream local).
- Using OutputStream:这更复杂,但您可以更好地控制传输的数据。一般来说,必须编写几行代码才能从中读取字节 InputStream 并将这些字节写入 OutputStream由存储方法...(),例如 storeFileStream(String remote).
- 关闭数据流 输入流 et OutputStream.
- 调用方法 completePendingCommand() 完成事务。
- 断开与服务器的连接。
方法返回值 商店...() 和 completePendingCommand() 以确保上传已完成。
4- Java
- boolean storeFile(String remote, InputStream local)
- OutputStream storeFileStream(String remote)
import java.io.File;执行此代码返回传输成功:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
导入org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
public class FTPUploadFile {
public static void main(String[] args) {
Server String = ServerAddress”;
int 端口 = 21;
字符串 user = 用户名”;
字符串密码 = yourPassword”;
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(server, port);
ftpClient.login(用户,密码);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
// 方法一:使用 InputStream
File file = new File(C:/plugins and styles.txt”);
String path = 插件和styles.txt”;
InputStream inputStream = new FileInputStream(file);
System.out.println(开始上传”);
//upload
boolean res = ftpClient.storeFile(path, inputStream);
//关闭读取的 stream
inputStream.close();
if (res==true) {
System.out.println(文件”+path+下载成功”);
}
// 方法二:使用 OutputStream
file = new File(C:/track 1.wma”);
path = 音频/音轨1.wma”;
inputStream = new FileInputStream(file);
System.out.println(开始上传”);
OutputStream outputStream = ftpClient.storeFileStream(路径);
byte[] bytesIn = 新字节[4096];
int 缓冲区 = 0;
//只要我们还没有到达文件的末尾
System.out.println(正在下载...”);
int 传输 = 0;
int 百分比 = 0;
//只要我们还没有到达文件的末尾
while ((buffer = inputStream.read(bytesIn)) != -1) {
//用 4096 bytes
outputStream.write(bytesIn, 0, buffer);
传输 += 缓冲区;
percent = (int) (transferred*100/file.length());
System.out.println(百分比+%”);
}
//close write read streams
inputStream.close();
outputStream.close();
//上传结果
res = ftpClient.completePendingCommand();
if (res) {
System.out.println(+path+” 文件已成功下载);
}
} catch (IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} finally {
try {
if (ftpClient.isConnected()) {
//close FTP
ftpClient.logout();
ftpClient.disconnect();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
上传开始
插件和styles.txt文件已成功下载
上传开始
1%
2%
3%
.
.
97%
98%
98%
99%
99%
100%
1.wma track 文件下载成功