背景
上傳資源圖片,默認(rèn)只可上傳至服務(wù)器所有在機器目錄。現(xiàn)需要增加ftp上傳、下載功能
設(shè)計
首先考慮盡可能封裝實現(xiàn)坦冠,即無論上傳至本地或者FTP遠(yuǎn)程目錄,都應(yīng)該在調(diào)用層無感知
偽代碼調(diào)用:
//上傳單個文件
FileUpload.upload(MultipartFile file, String fileName);
//上傳文件夾文件
FileUpload.uploadImgFile(String spath, String desPath)
//下載圖片
FileUpload.downloadImg(String fileName, HttpServletResponse response);
//現(xiàn)在文件夾圖片
FileUpload.downloadImgFile(String path);
考慮采用簡單工廠及鏈?zhǔn)綄崿F(xiàn)哥桥,如下
FileUpload.create().upload(xxx,xxx);
工廠create構(gòu)造方法
public class FileUpload {
//創(chuàng)建工廠實例,通過create方法建造
public static IUpload create() {
if (FtpUpload.getEnable()) { //如果啟用遠(yuǎn)程ftp上傳
return new FtpUpload();
} else { //項目磁盤上傳
return new LocalUpload();
}
}
//禁止外部new
private FileUpload(){};
}
初始考慮IUpload 為接口辙浑,但是考慮到本地【LocalUpload】無須實現(xiàn)download功能,本地資源可通過路由控制拟糕,所以最好能提供默認(rèn)實現(xiàn)判呕,幸好jdk1.8提供了接口默認(rèn)方法實現(xiàn)。
public interface IUpload {
boolean upload(MultipartFile file, String fileName) throws IOException;
default void downloadImg(String fileName,HttpServletResponse response) throws IOException{
throw new IOException("暫未實現(xiàn)");
};
default void downloadImgFile(String path) throws IOException{
throw new IOException("暫未實現(xiàn)");
};
void uploadImgFile(String spath,String desPath) throws IOException;
}
本地代碼類實現(xiàn)
public class LocalUpload implements IUpload {
@Override
public boolean upload(MultipartFile file, String destName) throws IOException {
File dest = new File(destName);
// 如果文件父目錄不存在送滞,則創(chuàng)建
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
file.transferTo(dest);
return true;
}
@Override
public void uploadImgFile(String spath, String desPath) throws IOException {
FileUtils.copyDirectory(new File(spath), new File(desPath));
}
}
下面一章侠草,重點講解通過ftp實現(xiàn)上傳、下載及遇到的問題
【特此聲明:本文原創(chuàng)累澡,禁止轉(zhuǎn)載梦抢!覺得有用打賞一個吧】