一、導包
注意:maven中央倉庫並沒有這個依賴,需要自行尋找資源並安裝到本地maven倉庫,才能正常使用下方的依賴
<dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.25</version> </dependency>
cmd下安裝依賴:
mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=1.25 -Dpackaging=jar -Dfile=D:\fastdfs_client-1.25.jar
pom.xml
<!--commons-io--> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <!--fastdfs客戶端--> <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.25</version> </dependency> <!--日志--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.21</version> </dependency>
二、操作API
在src/main/resources下創建配置文件。
log4j.properties
log4j.rootLogger=info, ServerDailyRollingFile, stdout log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender log4j.appender.ServerDailyRollingFile.DatePattern='.'yyyy-MM-dd log4j.appender.ServerDailyRollingFile.File=logs/notify-subscription.log log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d - %m%n log4j.appender.ServerDailyRollingFile.Append=true log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %p [%l] %m%n
fdfs_client.conf
# 連接tracker服務器超時時長 connect_timeout = 10 # socket連接超時時長 network_timeout = 30 # 文件內容編碼 charset = UTF-8 # Tracker Server提供HTTP服務的端口 # 與安裝時tracker.conf的port值一致 http.tracker_http_port = 22122 # 防盜鏈Token http.anti_steal_token = no # 密鑰, 隨便寫 http.secret_key = FastDFS1234567890 # tracker服務器IP和端口(可以寫多個) tracker_server = 192.168.178.7:22122 tracker_server = 192.168.178.10:22122
FastDFS文件上傳下載工具類
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.apache.log4j.Logger; import org.csource.common.NameValuePair; import org.csource.fastdfs.*; import java.io.*; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * @Description FastDFS文件上傳下載工具類 */ public final class FastDFSClient { private static final Logger logger = Logger.getLogger(FastDFSClient.class); /*直接放在類路徑下, 不能在前面加入 / 符號(/fdfs_client.conf) */ private static final String CONFIG_FILENAME = "fdfs_client.conf"; private static StorageClient1 storageClient1 = null; static { try { //加載連接信息 ClientGlobal.init(CONFIG_FILENAME); //創建TrackerClient對象 TrackerClient trackerClient = new TrackerClient(); //獲取TrackerServer對象 TrackerServer trackerServer = trackerClient.getConnection(); if (trackerServer == null) { throw new IllegalStateException("getConnection return null"); } //創建StorageServer對象 StorageServer storageServer = trackerClient.getStoreStorage(trackerServer); if (storageServer == null) { throw new IllegalStateException("getStoreStorage return null"); } //使用TrackerServer和StorageServer構造StorageClient對象 storageClient1 = new StorageClient1(trackerServer,storageServer); } catch (Exception e) { logger.error("創建storage client失敗:" + e); } } private FastDFSClient(){} /** * 上傳文件 * @param file 文件對象 * @param fileName 文件名 * @return */ public static String uploadFile(File file, String fileName) { return uploadFile(file,fileName,null); } /** * 上傳文件 * @param file 文件對象 * @param fileName 文件名 * @param metaList 文件元數據 * @return */ public static String uploadFile(File file, String fileName, Map<String,String> metaList) { try { byte[] buff = IOUtils.toByteArray(new FileInputStream(file)); NameValuePair[] nameValuePairs = null; if (metaList != null) { nameValuePairs = new NameValuePair[metaList.size()]; int index = 0; for (Iterator<Map.Entry<String,String>> iterator = metaList.entrySet().iterator(); iterator.hasNext();) { Map.Entry<String,String> entry = iterator.next(); String name = entry.getKey(); String value = entry.getValue(); nameValuePairs[index++] = new NameValuePair(name,value); } } return storageClient1.upload_file1(buff, FilenameUtils.getExtension(fileName), nameValuePairs); } catch (Exception e) { logger.error("上傳文件失敗:" + e); } return null; } /** * 獲取文件元數據 * @param fileId 文件ID * @return */ public static Map<String,String> getFileMetadata(String fileId) { try { NameValuePair[] metaList = storageClient1.get_metadata1(fileId); if (metaList != null) { HashMap<String,String> map = new HashMap<String, String>(); for (NameValuePair metaItem : metaList) { map.put(metaItem.getName(),metaItem.getValue()); } return map; } } catch (Exception e) { logger.error("獲取文件元數據失敗:" + e); } return null; } /** * 刪除文件 * @param fileId 文件ID * @return 刪除失敗返回-1,否則返回0 */ public static int deleteFile(String fileId) { try { return storageClient1.delete_file1(fileId); } catch (Exception e) { logger.error("刪除文件失敗:" + e); } return -1; } /** * 下載文件 * @param fileId 文件ID(上傳文件成功后返回的ID) * @param outFile 文件下載保存位置 * @return */ public static int downloadFile(String fileId, File outFile) { FileOutputStream fos = null; ByteArrayInputStream in = null; try { byte[] content = storageClient1.download_file1(fileId); in = new ByteArrayInputStream(content, 1, content.length); fos = new FileOutputStream(outFile); IOUtils.copy(in,fos); return 0; } catch (Exception e) { logger.error("下載文件失敗:" + e); } finally { if (in != null) { try { in.close(); } catch (IOException e) { logger.error("下載文件完畢后, 關閉輸入流失敗" + e); } } if (fos != null) { try { fos.close(); } catch (IOException e) { logger.error("下載文件完畢后, 關閉輸出流失敗" + e); } } } return -1; } }