yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y
mkdir /home/dfs #創建數據存儲目錄cd /usr/local/src #切換到安裝目錄準備下載安裝包
git clone https://github.com/happyfish100/libfastcommon.git --depth 1 #如果下載慢可使用gitee地址:git clone https://gitee.com/fastdfs100/libfastcommon.git --depth 1cd libfastcommon/./make.sh && ./make.sh install #編譯安裝
cd ../ #返回上一級目錄git clone https://github.com/happyfish100/fastdfs.git --depth 1# 如果下載慢可使用gitee地址:git clone https://gitee.com/fastdfs100/fastdfs.git --depth 1cd fastdfs/./make.sh && ./make.sh install #編譯安裝#配置文件準備cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.confcp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.confcp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf #客戶端文件,測試用cp /usr/local/src/fastdfs/conf/http.conf /etc/fdfs/ #供nginx訪問使用cp /usr/local/src/fastdfs/conf/mime.types /etc/fdfs/ #供nginx訪問使用
cd ../ #返回上一級目錄git clone https://github.com/happyfish100/fastdfs-nginx-module.git --depth 1# 如果下載慢可使用gitee地址:git clone https://gitee.com/fastdfs100/fastdfs-nginx-module.git --depth 1cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
wget http://nginx.org/download/nginx-1.15.4.tar.gz #下載nginx壓縮包tar -zxvf nginx-1.15.4.tar.gz #解壓cd nginx-1.15.4/#添加fastdfs-nginx-module模塊 ./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/ make && make install #編譯安裝
#服務器ip為: 192.168.52.1#我建議用ftp下載下來這些文件 本地修改vim /etc/fdfs/tracker.conf#需要修改的內容如下port=22122 # tracker服務器端口(默認22122,一般不修改)base_path=/home/dfs # 存儲日志和數據的根目錄
vim /etc/fdfs/storage.conf#需要修改的內容如下port=23000 # storage服務端口(默認23000,一般不修改)base_path=/home/dfs # 數據和日志文件存儲根目錄store_path0=/home/dfs # 第一個存儲目錄tracker_server=192.168.52.1:22122 # tracker服務器IP和端口http.server_port=8888 # http訪問文件的端口(默認8888,看情況修改,和nginx中保持一致)
vim /etc/fdfs/client.conf#需要修改的內容如下base_path=/home/dfstracker_server=192.168.52.1:22122 #tracker服務器IP和端口#保存后測試,返回ID表示成功 如:group1/M00/00/00/xx.tar.gzfdfs_upload_file /etc/fdfs/client.conf /usr/local/src/nginx-1.15.4.tar.gz
vim /etc/fdfs/mod_fastdfs.conf#需要修改的內容如下tracker_server=192.168.52.1:22122 #tracker服務器IP和端口url_have_group_name=truestore_path0=/home/dfs#配置nginx.configvim /usr/local/nginx/conf/nginx.conf#添加如下配置server { listen 8888; ## 該端口為storage.conf中的http.server_port相同 server_name localhost; location ~/group[0-9]/ { ngx_fastdfs_module; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }}#測試下載,用外部瀏覽器訪問剛才已傳過的nginx安裝包,引用返回的IDhttp://192.168.52.1:8888/group1/M00/00/00/wKgAQ1pysxmAaqhAAA76tz-dVgg.tar.gz#彈出下載單機部署全部跑通
#服務器ip為:192.168.52.2,192.168.52.3,192.168.52.4#我建議用ftp下載下來這些文件 本地修改vim /etc/fdfs/tracker.conf#需要修改的內容如下port=22122 # tracker服務器端口(默認22122,一般不修改)base_path=/home/dfs # 存儲日志和數據的根目錄
vim /etc/fdfs/storage.conf#需要修改的內容如下port=23000 # storage服務端口(默認23000,一般不修改)base_path=/home/dfs # 數據和日志文件存儲根目錄store_path0=/home/dfs # 第一個存儲目錄tracker_server=192.168.52.2:22122 # 服務器1tracker_server=192.168.52.3:22122 # 服務器2tracker_server=192.168.52.4:22122 # 服務器3http.server_port=8888 # http訪問文件的端口(默認8888,看情況修改,和nginx中保持一致)
vim /etc/fdfs/client.conf#需要修改的內容如下base_path=/home/moe/dfstracker_server=192.168.52.2:22122 # 服務器1tracker_server=192.168.52.3:22122 # 服務器2tracker_server=192.168.52.4:22122 # 服務器3#保存后測試,返回ID表示成功 如:group1/M00/00/00/xx.tar.gzfdfs_upload_file /etc/fdfs/client.conf /usr/local/src/nginx-1.15.4.tar.gz
vim /etc/fdfs/mod_fastdfs.conf#需要修改的內容如下tracker_server=192.168.52.2:22122 # 服務器1tracker_server=192.168.52.3:22122 # 服務器2tracker_server=192.168.52.4:22122 # 服務器3url_have_group_name=truestore_path0=/home/dfs#配置nginx.configvim /usr/local/nginx/conf/nginx.conf#添加如下配置server { listen 8888; ## 該端口為storage.conf中的http.server_port相同 server_name localhost; location ~/group[0-9]/ { ngx_fastdfs_module; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }}
#不關閉防火墻的話無法使用systemctl stop firewalld.service #關閉systemctl restart firewalld.service #重啟
/etc/init.d/fdfs_trackerd start #啟動tracker服務/etc/init.d/fdfs_trackerd restart #重啟動tracker服務/etc/init.d/fdfs_trackerd stop #停止tracker服務chkconfig fdfs_trackerd on #自啟動tracker服務
/etc/init.d/fdfs_storaged start #啟動storage服務/etc/init.d/fdfs_storaged restart #重動storage服務/etc/init.d/fdfs_storaged stop #停止動storage服務chkconfig fdfs_storaged on #自啟動storage服務
/usr/local/nginx/sbin/nginx #啟動nginx/usr/local/nginx/sbin/nginx -s reload #重啟nginx/usr/local/nginx/sbin/nginx -s stop #停止nginx
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf# 會顯示會有幾臺服務器 有3臺就會 顯示 Storage 1-Storage 3的詳細信息
tracker_server #有幾臺服務器寫幾個group_name #地址的名稱的命名bind_addr #服務器ip綁定store_path_count #store_path(數字)有幾個寫幾個store_path(數字) #設置幾個儲存地址寫幾個 從0開始
如果不是root 用戶 你必須在除了cd的命令之外 全部加sudo如果不是root 用戶 編譯和安裝分開進行 先編譯再安裝如果上傳成功 但是nginx報錯404 先檢查mod_fastdfs.conf文件中的store_path0是否一致如果nginx無法訪問 先檢查防火墻 和 mod_fastdfs.conf文件tracker_server是否一致如果不是在/usr/local/src文件夾下安裝 可能會編譯出錯如果 unknown directive "ngx_fastdfs_module" in /usr/local/nginx/conf/nginx.conf:151,可能是nginx一直是啟動的,必須要重啟nginx才可以,`nginx -s reload`無效。
第一種方式: 使用maven從源碼安裝
gitee源碼地址:https://gitee.com/fastdfs100/fastdfs-client-java.git
分布式存儲和集中存儲。github源碼地址:https://github.com/happyfish100/fastdfs-client-java.git
使用git clone 克隆源碼到本地倉庫,然后執行 mvn clean install 即可。
這里需要注意直接install的話只能打包源碼生成jar,但是沒有源碼,如果遇到問題調試不方便,所以在源碼的pom.xml中添加源碼打包插件,這樣在執行install后jar包和源碼包都會生成。如下:
org.apache.maven.plugins maven-source-plugin 3.0.1 true compilejar
maven本地倉庫有但是pom報錯?第二種方式: 使用maven從jar文件安裝到maven倉庫
打開命令行,輸入如下命令:
mvn install:install-file -Dfile=jar包的位置 -DgroupId=上面的groupId -DartifactId=上面的artifactId -Dversion=上面的version -Dpackaging=jar
真實案例如下:
mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=1.29-SNAPSHOT -Dpackaging=jar -Dfile=F:mav3epositoryorgcsourcefastdfs-client-javafastdfs-client-java-1.29-SNAPSHOT.jar
分布式存儲技術有哪些、完成以上步驟后,添加maven依賴jar包:
org.csourcefastdfs-client-java1.29-SNAPSHOT
環境配置好以后需要在linux服務器開放如下端口,否則客戶端無法訪問,報連接超時。
第一:nginx的服務端口:8888
第二:tracker server的端口:22122
第三:storage server的端口:23000
增加token和時間戳防止盜鏈,步驟如下:
第一步:將token設置為true,并且生成一個密鑰,這個密鑰至關重要放在服務端,泄露后會產生安全問題,具體生成方法建議生成一個UUID然后用md5加密后用作密鑰。
fastdfs.http_anti_steal_token=truefastdfs.http_secret_key=64edb5dd9fd277cb0686d56f1c634266
第二步:修改linux服務器安裝的配置文件http.conf,一般存放地址為:/etc/fdfs/http.conf 。注意,這里的secretkey的值要和上面生成的密鑰值保持一致。tokencheck_fail可以注釋,也可以保留,保留建議配置一個可以訪問的正確路徑。
# if use token to anti-steal# default value is false (0)http.anti_steal.check_token = true# token TTL (time to live), seconds# default value is 600http.anti_steal.token_ttl = 900# secret key to generate anti-steal token# this parameter must be set when http.anti_steal.check_token set to true# the length of the secret key should not exceed 128 byteshttp.anti_steal.secret_key = 64edb5dd9fd277cb0686d56f1c634266# return the content of the file when check token fail# default value is empty (no file sepecified)http.anti_steal.token_check_fail = /home/dfs/123456.png
第三步:重啟服務
/etc/init.d/fdfs_trackerd restart #重啟動tracker服務/etc/init.d/fdfs_storaged restart #重動storage服務/usr/local/nginx/sbin/nginx -s reload #重啟nginx
第四步:創建生成安全訪問地址的方法。這里的secret要和上面的密鑰保持一致。這里特別強調一點ProtoCommon.getToken方法的第一個參數不包含”組“group,第二個參數是時間戳,第三個參數是密鑰。
/** * @auther: mk * @param: 參數說明 * @return: 返回值說明 * @date: 2020/4/21 21:35 * @desc: (fastdfs開啟token和時間戳驗證,防盜鏈)*/@GetMapping(value = "/sys/common/dfsfile/token")public Result getFastDFSToken(@RequestParam(value = "dfsFilePath", required = true) String dfsFilePath) { String secret = "64edb5dd9fd277cb0686d56f1c634266"; //unix時間戳 以秒為單位 int ts = (int) (System.currentTimeMillis() / 1000); String token = null; try { String remoteFileName = dfsFilePath.substring(dfsFilePath.indexOf("/") + 1); token = ProtoCommon.getToken(remoteFileName, ts, secret); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } Result result = new Result<>(); if (StrUtil.isBlank(token)) { result.error500("獲取失敗!"); } else { StringBuilder sb = new StringBuilder(); sb.append(nginxHost); sb.append(dfsFilePath); sb.append("?token=").append(token); sb.append("&ts=").append(ts); result.setCode(200); result.setMessage("獲取成功!"); result.setResult(sb.toString()); } return result;}
生成訪問地址示例如下:
http://192.168.42.104:8888/group1/M00/00/00/wKgqaF6e_BaACnxTAAHOIjxzNLk072.png?token=31c0b171f6a589fcf539635bd140f4ba&ts=1587477535
第五步:如果經過以上四步發現生成的token驗證無法通過,請檢查確認服務器時間基本是一致的,注意服務器時間不能相差太多,不要相差到分鐘級別。
至此FastDFS防盜鏈配置已完成!!!
在src/main/resource目錄下創建 fastdfs-client.properties 文件,內容如下:
fastdfs.connect_timeout_in_seconds=5fastdfs.network_timeout_in_seconds=30fastdfs.charset=UTF-8fastdfs.http_anti_steal_token=truefastdfs.http_secret_key=64edb5dd9fd277cb0686d56f1c634266fastdfs.http_tracker_http_port=8888fastdfs.tracker_servers=192.168.42.104:22122fastdfs.connection_pool.enabled=truefastdfs.connection_pool.max_count_per_entry=500fastdfs.connection_pool.max_idle_time=3600fastdfs.connection_pool.max_wait_time_in_ms=1000
在springboot的配置文件中添加如下內容:
#fastdfs分布式文件存儲訪問路徑fastdfs.nginx.host=http://192.168.42.104:8888/
完成fastdfs的上傳、下載、刪除、查看文件信息功能
/** * @auther: mk * @date: 2020/4/21 18:25 * @desc: (fastdfs上傳文件信息) */public class FastDFSFileUtil { //文件名稱 private String name; //文件內容 private byte[] content; //文件擴展名 private String ext; //文件加密名稱 private String md5; //元信息:作者名稱 private String author; public FastDFSFileUtil(String name, byte[] content, String ext, String author) { this.name = name; this.content = content; this.ext = ext; this.author = author; } public FastDFSFileUtil(String name, byte[] content, String ext) { super(); this.name = name; this.content = content; this.ext = ext; } public String getName() { return name; } public void setName(String name) { this.name = name; } public byte[] getContent() { return content; } public void setContent(byte[] content) { this.content = content; } public String getExt() { return ext; } public void setExt(String ext) { this.ext = ext; } public String getMd5() { return md5; } public void setMd5(String md5) { this.md5 = md5; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; }}
import cn.hutool.core.io.resource.ClassPathResource;import org.csource.common.MyException;import org.csource.common.NameValuePair;import org.csource.fastdfs.*;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Properties;/** * @auther: mk * @date: 2020/4/21 16:34 * @desc: (fastdfs分布式文件存儲工具類) */public class FastDFSUtil { private static final Logger logger = LoggerFactory.getLogger(FastDFSUtil.class); private FastDFSUtil() { } ; static { try { ClassPathResource resource = new ClassPathResource("fastdfs-client.properties"); Properties properties = new Properties(); properties.load(resource.getStream()); ClientGlobal.initByProperties(properties); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } System.out.println("ClientGlobal.configInfo(): " + ClientGlobal.configInfo()); } /** * @auther: mk * @param: 參數說明 * @return: 返回值說明 * @date: 2020/4/21 18:08 * @desc: (fastdfs上傳服務器) */ public static String[] upload(FastDFSFileUtil fastDFSFile) { logger.info("File Name: " + fastDFSFile.getName() + "File Length:" + fastDFSFile.getContent().length); NameValuePair[] meta_list = new NameValuePair[1]; meta_list[0] = new NameValuePair("author", fastDFSFile.getAuthor()); String[] uploadResults = null; StorageClient storageClient = null; try { long startTime = System.currentTimeMillis(); storageClient = getStorageClient(); uploadResults = storageClient.upload_file(fastDFSFile.getContent(), fastDFSFile.getExt(), meta_list); logger.info("upload_file time used:" + (System.currentTimeMillis() - startTime) + " ms"); if (uploadResults == null && storageClient != null) { logger.error("upload file fail, error code:" + storageClient.getErrorCode()); } String groupName = uploadResults[0]; String remoteFileName = uploadResults[1]; logger.info("upload file successfully!!!" + "group_name:" + groupName + ", remoteFileName:" + " " + remoteFileName); } catch (IOException e) { logger.error("IO Exception when uploadind the file:" + fastDFSFile.getName(), e); } catch (MyException e) { logger.error("Non IO Exception when uploadind the file:" + fastDFSFile.getName(), e); } finally { if (storageClient != null) { try { storageClient.close(); } catch (Exception e) { e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } } return uploadResults; } public static FileInfo getFile(String groupName, String remoteFileName) { StorageClient storageClient = null; try { storageClient = getStorageClient(); return storageClient.get_file_info(groupName, remoteFileName); } catch (IOException e) { logger.error("IO Exception: Get File from Fast DFS failed", e); } catch (MyException e) { logger.error("Non IO Exception: Get File from Fast DFS failed", e); } finally { if (storageClient != null) { try { storageClient.close(); } catch (Exception e) { e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } } return null; } /** * @auther: mk * @param: 參數說明 * @return: 返回值說明 * @date: 2020/4/21 18:09 * @desc: (fastdfs下載文件) */ public static InputStream download(String groupName, String remoteFileName) { StorageClient storageClient = null; try { storageClient = getStorageClient(); byte[] fileByte = storageClient.download_file(groupName, remoteFileName); InputStream ins = new ByteArrayInputStream(fileByte); return ins; } catch (IOException e) { logger.error("IO Exception: Get File from Fast DFS failed", e); } catch (Exception e) { logger.error("Non IO Exception: Get File from Fast DFS failed", e); } finally { if (storageClient != null) { try { storageClient.close(); } catch (Exception e) { e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } } return null; } /** * @auther: mk * @param: 參數說明 * @return: 返回值說明 * @date: 2020/4/21 18:09 * @desc: (fastdfs刪除文件) */ public static boolean deleteFile(String groupName, String remoteFileName) { StorageClient storageClient = getStorageClient(); int i = 100; try { i = storageClient.delete_file(groupName, remoteFileName); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } finally { if (storageClient != null) { try { storageClient.close(); } catch (Exception e) { e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } } if (i == 0) { //@return 0 for success, none zero for fail (error code) logger.info("delete file successfully!!!" + i); return true; } else { return false; } } public static StorageServer[] getStoreStorages(String groupName) { TrackerServer trackerServer = null; StorageServer[] storageServers = null; try { TrackerClient trackerClient = new TrackerClient(); trackerServer = trackerClient.getTrackerServer(); storageServers = trackerClient.getStoreStorages(trackerServer, groupName); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return storageServers; } public static ServerInfo[] getFetchStorages(String groupName, String filename) { TrackerServer trackerServer = null; ServerInfo[] serverInfos = null; try { TrackerClient trackerClient = new TrackerClient(); trackerServer = trackerClient.getTrackerServer(); serverInfos = trackerClient.getFetchStorages(trackerServer, groupName, filename); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return serverInfos; } public static String getTrackerUrl() { return "http://" + getTrackerServer().getInetSocketAddress().getHostString() + ":" + ClientGlobal.getG_tracker_http_port() + "/"; } /** * @auther: mk * @param: 參數說明 * @return: 返回值說明 * @date: 2020/4/21 17:27 * @desc: (存儲客戶端) */ private static StorageClient getStorageClient() { TrackerServer trackerServer = getTrackerServer(); StorageClient storageClient = new StorageClient(trackerServer, null); return storageClient; } private static TrackerServer getTrackerServer() { TrackerClient trackerClient = new TrackerClient(); TrackerServer trackerServer = null; try { trackerServer = trackerClient.getTrackerServer(); } catch (IOException e) { e.printStackTrace(); } return trackerServer; }}
import cn.hutool.core.util.IdUtil;import cn.hutool.core.util.StrUtil;import org.csource.common.MyException;import org.csource.fastdfs.FileInfo;import org.csource.fastdfs.ProtoCommon;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.*;import java.security.NoSuchAlgorithmException;import java.util.HashMap;import java.util.Map;/** * @auther: mk * @param: 參數說明 * @return: 返回值說明 * @date: 2020/4/21 22:29 * @desc: (公共訪問控制器) */@RestControllerpublic class CommonController { private final Logger log = LoggerFactory.getLogger(CommonController.class); @Value("${fastdfs.nginx.host}") String nginxHost; /** * @auther: mk * @param: 參數說明 * @return: 返回值說明 * @date: 2020/4/21 19:46 * @desc: (上傳文件) */ @PostMapping(value = "/sys/common/upload") public Result upload(HttpServletRequest request) { Result result = new Result<>(); try { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; MultipartFile mf = multipartRequest.getFile("dfsFile");// 獲取上傳文件對象 if (null != mf) { String originalFilename = mf.getOriginalFilename();// 獲取文件名 String[] uploadResult = FastDFSUtil.upload(new FastDFSFileUtil(originalFilename, mf.getBytes(), originalFilename.substring(originalFilename.lastIndexOf(".") + 1))); if (null != uploadResult && uploadResult.length > 0) { String dbpath = uploadResult[0] + File.separator + uploadResult[1]; if (dbpath.contains("")) { dbpath = dbpath.replace("", "/"); } Map returnMap = new HashMap<>(); returnMap.put("name", originalFilename); returnMap.put("path", dbpath); result.setResult(returnMap); result.setMessage("上傳成功!"); result.setSuccess(true); } else { result.error500("上傳失敗!"); } } } catch (IOException e) { result.error500(e.getMessage()); log.error(e.getMessage(), e); } return result; } /** * @auther: mk * @param: 參數說明 * @return: 返回值說明 * @date: 2020/4/21 19:46 * @desc: (下載文件) */ @GetMapping(value = "/sys/common/download") public void download(@RequestParam(value = "dfsFilePath", required = true) String dfsFilePath, @RequestParam(value = "fileName", required = false) String fileName, HttpServletResponse response) { InputStream inputStream = null; OutputStream outputStream = null; try { String groupName = dfsFilePath.substring(0, dfsFilePath.indexOf("/")); String remoteFileName = dfsFilePath.substring(dfsFilePath.indexOf("/") + 1); String ext = dfsFilePath.substring(dfsFilePath.lastIndexOf(".")); InputStream is = FastDFSUtil.download(groupName, remoteFileName); response.setContentType("application/force-download");// 設置強制下載不打開 ? ? ? ? ? ? response.addHeader("Content-Disposition", "attachment;fileName=" + new String((StrUtil.isBlank(fileName) ? IdUtil.simpleUUID() : fileName).getBytes("UTF-8"), "iso-8859-1") + ext); inputStream = new BufferedInputStream(is); outputStream = response.getOutputStream(); byte[] buf = new byte[1024]; int len; while ((len = inputStream.read(buf)) > 0) { outputStream.write(buf, 0, len); } response.flushBuffer(); } catch (Exception e) { log.error("文件下載失敗" + e.getMessage()); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (outputStream != null) { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * @auther: mk * @param: 參數說明 * @return: 返回值說明 * @date: 2020/4/21 20:06 * @desc: (刪除文件) */ @GetMapping(value = "/sys/common/delete") public Result> delete(@RequestParam(value = "dfsFilePath", required = true) String dfsFilePath) { String groupName = dfsFilePath.substring(0, dfsFilePath.indexOf("/")); String remoteFileName = dfsFilePath.substring(dfsFilePath.indexOf("/") + 1); boolean deleteResult = FastDFSUtil.deleteFile(groupName, remoteFileName); Result> result = new Result<>(); if (deleteResult) { result.setCode(200); result.setMessage("刪除成功!"); } else { result.error500("刪除失敗!"); } return result; } /** * @auther: mk * @param: 參數說明 * @return: 返回值說明 * @date: 2020/4/21 20:34 * @desc: (獲取上傳文件詳細信息) */ @GetMapping(value = "/sys/common/dfsfile/detail") public Result detail(@RequestParam(value = "dfsFilePath", required = true) String dfsFilePath) { String groupName = dfsFilePath.substring(0, dfsFilePath.indexOf("/")); String remoteFileName = dfsFilePath.substring(dfsFilePath.indexOf("/") + 1); FileInfo fileInfo = FastDFSUtil.getFile(groupName, remoteFileName); Result result = new Result<>(); if (null != fileInfo) { result.setCode(200); result.setResult(fileInfo); result.setMessage("獲取成功!"); } else { result.error500("獲取失敗!"); } return result; } /** * @auther: mk * @param: 參數說明 * @return: 返回值說明 * @date: 2020/4/21 21:35 * @desc: (fastdfs開啟token和時間戳驗證,防盜鏈) */ @GetMapping(value = "/sys/common/dfsfile/token") public Result getFastDFSToken(@RequestParam(value = "dfsFilePath", required = true) String dfsFilePath) { String secret = "64edb5dd9fd277cb0686d56f1c634266"; //unix時間戳 以秒為單位 int ts = (int) (System.currentTimeMillis() / 1000); String token = null; try { String remoteFileName = dfsFilePath.substring(dfsFilePath.indexOf("/") + 1); token = ProtoCommon.getToken(remoteFileName, ts, secret); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } Result result = new Result<>(); if (StrUtil.isBlank(token)) { result.error500("獲取失敗!"); } else { StringBuilder sb = new StringBuilder(); sb.append(nginxHost); sb.append(dfsFilePath); sb.append("?token=").append(token); sb.append("&ts=").append(ts); result.setCode(200); result.setMessage("獲取成功!"); result.setResult(sb.toString()); } return result; }}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态