springboot集成ftp實(shí)現(xiàn)文件上傳
更新時(shí)間:2021年05月19日 11:25:12 作者:張兵游勇
這篇文章主要為大家詳細(xì)介紹了springboot集成ftp實(shí)現(xiàn)文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了springboot集成ftp實(shí)現(xiàn)文件上傳的具體代碼,供大家參考,具體內(nèi)容如下
1、FileUtil
package io.renren.modules.oss.utils;
import org.apache.commons.net.ftp.FTPClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component
public class FileUtil {
//ftp服務(wù)器ip地址
@Value("${custom.config.file-server.ip}") // 相關(guān)配置放在application.properties 中
String FTP_ADDRESS;
//端口號(hào)
@Value("${custom.config.file-server.port}")
Integer FTP_PORT;
//用戶名
@Value("${custom.config.file-ftp-user}")
String FTP_USERNAME;
//密碼
@Value("${custom.config.file-ftp-password}")
String FTP_PASSWORD;
//圖片路徑
@Value("${custom.config.file-savepath}")
String FTP_BASEPATH;
//根據(jù)當(dāng)前文件生成 文件夾
private static String getTimePath() {
Date now = new Date();
DateFormat format = new SimpleDateFormat("yyyy/MM/dd/");
return format.format(now);
}
public String upload(InputStream inputStream, String originName) {
StringBuilder url = new StringBuilder();
FTPClient ftp = new FTPClient();
ftp.setControlEncoding("GBK");
try {
int reply;
ftp.connect(FTP_ADDRESS, FTP_PORT);// 連接FTP服務(wù)器
ftp.login(FTP_USERNAME, FTP_PASSWORD);// 登錄
reply = ftp.getReplyCode();
System.out.println("reply:" + reply);
ftp.enterLocalPassiveMode();//開(kāi)啟被動(dòng)模式,否則文件上傳不成功,也不報(bào)錯(cuò)
String timePath = getTimePath();
String saveDir = FTP_BASEPATH + timePath;
url.append(saveDir);
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
createDir(ftp, saveDir);
//ftp.makeDirectory(saveDir);
// ftp.changeWorkingDirectory(FTP_BASEPATH);
originName= System.currentTimeMillis()+originName.substring(originName.lastIndexOf('.'));
url.append(originName);
ftp.storeFile(originName, inputStream);
inputStream.close();
ftp.logout();
} catch (IOException e) {
throw new RuntimeException("文件上傳失敗");
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return url.toString();
}
// 創(chuàng)建文件夾,并切換到該文件夾
// 比如: hello/test
//最終會(huì)切換到test 文件夾返回
private void createDir(FTPClient client, String path) throws IOException {
String[] dirs = path.split("/");
for (String dir : dirs) {
if (StringUtils.isEmpty(dir)) {
continue;
}
if (!client.changeWorkingDirectory(dir)) {
client.makeDirectory(dir);
}
client.changeWorkingDirectory(dir);
}
}
}
2、application.properties
#//ftp服務(wù)器ip地址 custom.config.file-server.ip=111.229.65.208 #String FTP_ADDRESS; #//端口號(hào) custom.config.file-server.port=21 #Integer FTP_PORT; #//用戶名 custom.config.file-ftp-user=root #String FTP_USERNAME; #//密碼 custom.config.file-ftp-password=123456 #String FTP_PASSWORD; #//圖片路徑 custom.config.file-savepath=/upload #String FTP_BASEPATH;
3、UploadController
/** * 上傳文件 */ String fileUrl = fileUtil.upload(file.getInputStream(), file.getOriginalFilename());
得到路徑:/upload2020/11/23/1606122890137.jpg
4、ftp查看

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java的面向?qū)ο缶幊袒靖拍顚W(xué)習(xí)筆記整理
這篇文章主要介紹了Java的面向?qū)ο缶幊袒靖拍顚W(xué)習(xí)筆記整理,包括類與方法以及多態(tài)等支持面向?qū)ο笳Z(yǔ)言中的重要特點(diǎn),需要的朋友可以參考下2016-01-01
Spring Cloud分布式定時(shí)器之ShedLock的實(shí)現(xiàn)
這篇文章主要介紹了Spring Cloud分布式定時(shí)器之ShedLock的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Java 互相關(guān)聯(lián)的實(shí)體無(wú)限遞歸問(wèn)題的解決
這篇文章主要介紹了Java 互相關(guān)聯(lián)的實(shí)體無(wú)限遞歸問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
Spring6?的JdbcTemplate的JDBC模板類的使用介紹(最新推薦)
JdbcTemplate?是Spring?提供的一個(gè)JDBC模板類,是對(duì)JDBC的封裝,簡(jiǎn)化JDBC代碼,當(dāng)然,你也可以不用,可以讓Spring集成其它的ORM框架,這篇文章主要介紹了Spring6?的JdbcTemplate的JDBC模板類的詳細(xì)使用說(shuō)明,需要的朋友可以參考下2024-05-05

