在《Spring Cloud實現(xiàn)文件上傳》一文中戚啥,我利用Spring Cloud實現(xiàn)了文件上傳的微服務(wù)祠斧。讓我們再想想這種情況吞琐,如果我想上傳文件后其他應用能夠訪問到該文件,那我們必須將該文件上傳至某個ftp或web服務(wù)器路徑目錄下奔誓;如果多個應用都要調(diào)用文件上傳服務(wù)斤吐,必須對文件的上傳目錄進行結(jié)構(gòu)組織;如若要方便用戶直接查找文件的話厨喂,可能還要對文件按規(guī)則統(tǒng)一命名和措,太多問題撲面而來。
上述問題究其根本蜕煌,是我們需要一個圖片服務(wù)器派阱。它能夠進行組織存儲、文件命名斜纪、文檔容災等等贫母,而fastdfs就是個很好的圖片服務(wù)器腳手架文兑。
fastdfs安裝
參考:FastDFS 安裝和配置
騰訊云服務(wù)器 安裝fastdfs文件服務(wù)器
利用fastdfs自帶的client測試圖片上傳
這里要特別注意一個配置,忽略它也許你訪問圖片會報
Nginx 400 Bad Request
在fastdfs-nginx-module模塊mod_fastdfs.conf配置文件中有如下一個配置
# if the url / uri including the group name
# set to false when uri like /M00/00/00/xxx
# set to true when uri like ${group_name}/M00/00/00/xxx, such as group1/M00/xxx
# default value is false
url_have_group_name = true
可以看到腺劣,如果我們配置了group_name绿贞,必須設(shè)置url_have_group_name為true
總體思路
利用fastdfs client java操作fastdfs,將返回的url持久化到數(shù)據(jù)庫中橘原,并告知服務(wù)調(diào)用方籍铁。
如何利用java操作fastdfs呢,非常幸運在github上作者:happyfish100開源了fastdfs-client-java趾断,將項目clone下來拒名,進行打包,注冊到本地庫中芋酌。
在maven中添加fastdfs-client-java
<dependency>
<groupId>org.csource</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27-SNAPSHOT</version>
</dependency>
在服務(wù)提供方內(nèi)增显,添加uploadpicturetoFastDFS接口,向外提供服務(wù)隔嫡。這里利用泛型來包裝結(jié)果致Result類的data屬性中甸怕,采用這種方法的好處是,我們無須針對各種返回結(jié)果定義對應的數(shù)據(jù)結(jié)構(gòu)腮恩。
具體實現(xiàn):
@Override
public Result uploadtofastdfs(String filename, byte[] data) {
PictureResult pictureResult = new PictureResult();
try {
FastDFSClient client = new FastDFSClient("classpath:fdfs_client.conf");
String extName = filename.substring(filename.lastIndexOf(".") + 1);
String url = client.uploadFile(data, extName);
pictureResult.setUrlDB(url);
pictureResult.setUrl(imageServerUrl + url);
System.out.println("-------文件上傳成功!-------------");
System.out.println(pictureResult.getUrl());
Result<PictureResult> result = new Result(0, "上傳成功", pictureResult);
return result;
} catch (Exception e) {
e.printStackTrace();
}
return new Result(1, "上傳失敗");
}
因圖片服務(wù)器的ip地址會改變温兼,所以我們在數(shù)據(jù)庫中只持久化fieldID值秸滴,為了方便服務(wù)方調(diào)用,同時向外提供拼接好的圖片訪問地址募判。