springboot集成ftp實(shí)現(xiàn)文件上傳
本文實(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; //用戶(hù)名 @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; #//用戶(hù)名 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)文章
一文帶你掌握J(rèn)ava中Scanner類(lèi)的使用
Scanner類(lèi)是java.util包中的一個(gè)類(lèi),常用于控制臺(tái)的輸入,當(dāng)需要使用控制臺(tái)輸入時(shí)即可調(diào)用這個(gè)類(lèi)。本文將通過(guò)一些簡(jiǎn)單的例子為大家介紹一下Java中Scanner類(lèi)的使用,需要的可以參考一下2023-04-04Spring?Cache+Redis緩存數(shù)據(jù)的實(shí)現(xiàn)示例
本文主要介紹了Spring?Cache+Redis緩存數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01JavaCV實(shí)現(xiàn)讀取視頻信息及自動(dòng)截取封面圖詳解
javacv可以幫助我們?cè)趈ava中很方便的使用OpenCV以及FFmpeg相關(guān)的功能接口。本文將利用Javacv實(shí)現(xiàn)在視頻網(wǎng)站中常見(jiàn)的讀取視頻信息和自動(dòng)獲取封面圖的功能,感興趣的可以了解一下2022-06-06SpringBoot?AOP?Redis實(shí)現(xiàn)延時(shí)雙刪功能實(shí)戰(zhàn)
本文主要介紹了SpringBoot?AOP?Redis實(shí)現(xiàn)延時(shí)雙刪功能實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08uploadify java實(shí)現(xiàn)多文件上傳和預(yù)覽
這篇文章主要為大家詳細(xì)介紹了java結(jié)合uploadify實(shí)現(xiàn)多文件上傳和預(yù)覽的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10Java實(shí)現(xiàn)添加文字水印&圖片水印的方法詳解
為圖片添加水印的主要作用是保護(hù)圖片版權(quán),防止圖片被未經(jīng)授權(quán)的人使用或傳播。本文為大家介紹了Java實(shí)現(xiàn)添加文字水印&圖片水印的具體方法,需要的可以參考一下2023-02-02Lombok中@Builder和@SuperBuilder注解的用法案例
@Builder?是?lombok?中的注解,可以使用builder()構(gòu)造的Person.PersonBuilder對(duì)象進(jìn)行鏈?zhǔn)秸{(diào)用,給所有屬性依次賦值,這篇文章主要介紹了Lombok中@Builder和@SuperBuilder注解的用法,需要的朋友可以參考下2023-01-01Java實(shí)現(xiàn)分解任意輸入數(shù)的質(zhì)因數(shù)算法示例
這篇文章主要介紹了Java實(shí)現(xiàn)分解任意輸入數(shù)的質(zhì)因數(shù)算法,涉及java數(shù)學(xué)運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-10-10