话不多说上代码
1.所使用的包
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.*;
2.参数配置
private static final String FTP_IP = "xxx.xxx.xxx.xxx";
private static final String FTP_BASEPATH = "/public";
private static final String IMAGE_BASE_URL = "http://xxx.xxx.xxx.xxx:9999/public/";
private static final int FTP_PORT = 21;
private static final String FTP_USERNAME = "rain";
private static final String FTP_PASSWORD = "rain";
private static final int FTP_CONNECTION_TIMEOUT = 60 * 1000;
private static String separator = File.separator;
3.文件上传
public String uploadFile(String filePath, String filename, InputStream input) {
String result = "";
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(ftpIp, ftpPort);
ftp.login(ftpUsername, ftpPassword);
ftp.enterLocalPassiveMode();
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return result;
}
if (!ftp.changeWorkingDirectory(ftpBasepath + filePath)) {
String[] dirs = filePath.split("/");
String tempPath = ftpBasepath;
for (String dir : dirs) {
if (null == dir || "".equals(dir))
continue;
tempPath += "/" + dir;
if (!ftp.changeWorkingDirectory(tempPath)) {
if (!ftp.makeDirectory(tempPath)) {
return result;
} else {
ftp.changeWorkingDirectory(tempPath);
}
}
}
}
ftp.setFileType(FTP.BINARY_FILE_TYPE);
if (!ftp.storeFile(filename, input)) {
return result;
}
input.close();
ftp.logout();
result = imageBaseUrl + filePath + "/" + filename;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return result;
}
4.说明
`我在使用FTP作为上传工具时,会把Nginx设置一个文件代理服务器作为下载使用,
上传文件的返回的String是我拼接好的下载地址,在浏览器中直接就可以下载或者播放视频`