FastDFS實現檔案上傳下載實戰
正好,淘淘商城講這一塊的時候,我又想起來當時老徐讓我寫過一個關於實現FastDFS實現檔案上傳下載的使用文件,當時結合我們的ITOO的視訊系統和畢業論文系統,整理了一下,有根據網上查到的知識,總結了一點東西,下面分享一下一、FastDFS簡介:
參見部落格:http://blog.csdn.net/liweizhong193516/article/details/53234486二、FastDFS使用流程介紹:
我們在itoo的dobbu+zk框架中使用fastdfs+nginx+mysql實現上傳附件的功能,主要原理就是將附件上傳到fastdfs得到一個檔案的連結路徑url,我們獲取到這個url將他以字串形式儲存到我們的mysql中,下載的時候獲取到這個url直接開啟或者下載附件。(url內容參見部落格:http://blog.csdn.net/liweizhong193516/article/details/52556526)
預設的,我們就知道fastdfs後面還有一個nginx伺服器,當我們進行儲存檔案的時候,我們要通過fastdfs給我們生成一個儲存地址,也就是grounpID 和儲存地址,然後將檔案存在fastdfs伺服器中,fastdfs中有許多的16進制命名資料夾,資料夾中套資料夾;當我們進行讀取檔案的時候,我們要通過獲取mysql裡面的相應檔案的儲存地址去nginx伺服器中通過url路徑檔名,從fastdfs檔案中取出我們的檔案進行展示。(所以下載圖,有點問題,在這裡解釋一下)
三、實現流程:
1、配置依賴:因為我們使用的maven來管理工程,所以,我們需要去陪pom檔案
當然,更多時候我們利用maven的繼承特性,直接配置在父工程中,然後繼承下來就o了。<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.leech</groupId> <artifactId>fastdfs-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>fastdfs-demo</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.25</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> </dependencies> </project>
2、新建fdfs_client.conf檔案,在我們的itoo中,我們建立在(src/main/resources底下)
connect_timeout = 2
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 80
#沒什麼用
http.anti_steal_token = no
http.secret_key = FastDFS1234567890
tracker_server = 192.168.17.112:22122
#tracker_server = 192.168.0.119:22122
3、實現檔案上傳:
public void save(HttpServletRequest request,HttpServletResponse response){
String videoName=request.getParameter("videoName");
String videoType=request.getParameter("videoType");
String videoDesc=request.getParameter("videoDesc");
String videoPath=request.getParameter("videoPath");
String picturePath=request.getParameter("picturePath");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date uploadTime=null;
try {
uploadTime = formatter.parse(formatter.format(new Date()));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JacksonJsonUntil jackJsonUtil =new JacksonJsonUntil ();
String dataBaseName = "itoo_video";
Video video=new Video();
video.setUserName("why");
video.setUserID("why");
video.setVideoName(videoName);
video.setVideoPath(videoPath);
video.setVideoType(videoType);
video.setVideoDesc(videoDesc);
video.setDataBaseName(dataBaseName);
video.setPicturePath(picturePath);
video.setUploadTime(uploadTime);
uploadFileService.save(video);
jackJsonUtil.beanToJson(response,video);
}
/*
* 上傳檔案
*/
@RequestMapping(value={"/upload"})
@ResponseBody
public void upload( MultipartFile file, HttpServletRequest request,HttpServletResponse response){
String ext_Name = file.getOriginalFilename().split("\\.")[1];
String videoName=file.getOriginalFilename().split("\\.")[0];
byte[] bytes = null;
try {
bytes = file.getBytes();
} catch (IOException e) {
e.printStackTrace();
}
String videoPath=uploadFile(bytes,ext_Name);
JacksonJsonUntil jackJsonUtil =new JacksonJsonUntil ();
Video video=new Video();
video.setVideoPath(videoPath);
video.setVideoName(videoName);
jackJsonUtil.beanToJson(response,video);
}
public String uploadFile(byte[] byteFile, String ext_file) {
// 拼接服務區的檔案路徑
StringBuffer sbPath = new StringBuffer();
sbPath.append("http://192.168.22.252");
try {
// 初始化檔案資源
ClientGlobal
.init("C:\\Users\\alsr\\Desktop\\ITOO-5.0\\itoo-video-Test\\dmsd-itoo-video-parent\\dmsd-itoo-video-web\\src\\main\\resources\\fdfs_client.conf");
// 連結FastDFS伺服器,建立tracker和Stroage
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer,
storageServer);
//利用位元組流上傳檔案
String[] strings = storageClient.upload_file(byteFile, ext_file, null);
for (String string : strings) {
sbPath.append("/" + string);
System.out.println(string);
}
// 全路徑
System.out.println(sbPath);
} catch (IOException | MyException e) {
e.printStackTrace();
}
return sbPath.toString();
}
只要我們能正常接收到一個json型別的字串(url地址),就證明我們已經上傳成功了,如果不信,可以直接用瀏覽器去驗證一下,看看能不能得到檔案展示。4、FastDFS實現檔案下載:
public void testDownload() {
try {
ClientGlobal.init(conf_filename);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
byte[] b = storageClient.download_file("group1", "M00/00/00/wKgRcFV_08OAK_KCAAAA5fm_sy874.conf");
System.out.println(b);
IOUtils.write(b, new FileOutputStream("D:/"+UUID.randomUUID().toString()+".conf"));
}
catch (Exception e) {
e.printStackTrace();
}
}
5、FastDFS獲取將上傳檔案資訊:
public void testGetFileInfo(){
try {
ClientGlobal.init(conf_filename);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
FileInfo fi = storageClient.get_file_info("group1", "M00/00/00/wKgRcFV_08OAK_KCAAAA5fm_sy874.conf");
System.out.println(fi.getSourceIpAddr()); System.out.println(fi.getFileSize());
System.out.println(fi.getCreateTimestamp()); System.out.println(fi.getCrc32());
}
catch (Exception e) {
e.printStackTrace();
}
}
6、FastDFS獲取檔名稱:
public void testGetFileMate(){
try {
ClientGlobal.init(conf_filename);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer,
storageServer);
NameValuePair nvps [] = storageClient.get_metadata("group1", "M00/00/00/wKgRcFV_08OAK_KCAAAA5fm_sy874.conf");
for(NameValuePair nvp : nvps){
System.out.println(nvp.getName() + ":" + nvp.getValue());
}
}
catch (Exception e) {
e.printStackTrace();
}
}
7、FastDFS實現刪除檔案:
public void testDelete(){
try {
ClientGlobal.init(conf_filename);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer,storageServer);
int i = storageClient.delete_file("group1", "M00/00/00/wKgRcFV_08OAK_KCAAAA5fm_sy874.conf");
System.out.println( i==0 ? "刪除成功" : "刪除失敗:"+i);
}
catch (Exception e) {
e.printStackTrace();
}
}
相關推薦
FastDFS實現檔案上傳下載實戰
正好,淘淘商城講這一塊的時候,我又想起來當時老徐讓我寫過一個關於實現FastDFS實現檔案上傳下載的使用文件,當時結合我們的ITOO的視訊系統和畢業論文系統,整理了一下,有根據網上查到的知識,總結了一點東西,下面分享一下 一、FastDFS簡介:
Java Springboot結合FastDFS實現檔案上傳以及根據圖片url將圖片上傳至圖片伺服器
上一篇文章我們已經講解了如何搭建FastDFS圖片伺服器,環境我們準備好了現在就讓我們開始與Java結合將他應用到實際的專案中吧。本篇文章我們將會展示上傳圖片到FastDFS圖片伺服器以及通過外網的圖片url將圖片上傳至我們自己的圖片伺服器中。 1.建立springbo
Struts2 實現檔案上傳下載
檔案上傳對Struts2來說是一件非常容易的事情。Struts2檔案上傳依賴如下jar包 commons-fileupload-x.x.x.jar commons-io-x.x.x.jar 檔案上傳大致步驟: 編寫頁面 配置struts.xml 攔截器會自動接收上傳的檔
JspSmartUpload 實現檔案上傳下載及Mysql實現分頁
一、寫在前面 這篇文章主要是分享使用JspSamrtUpload實現多檔案的上傳下載功能,及使用Mysql資料庫的 limit 函式實現檔案顯示列表的分頁顯示功能。 二、需要的jar包 下載後把它複製到web的lib目錄下即可。 三、關鍵程式碼 3.1 多檔案上傳前
MAC實用SSH連線遠端伺服器,並實現檔案上傳下載
MAC作為程式設計師的神器,在程式設計上的使用遠超window的電腦,而MAC本身提供了SSH功能,配合VIM編輯器對程式設計十分有幫助。 使用ssh連線遠端主機 sudo -i 切換root許可權 ssh [email protected] 其中,
React中使用fetch實現檔案上傳下載
在最近的專案中需要實現檔案上傳下載功能,在以前spring、jsp的專案中實現檔案上傳很簡單,但現在前後端分離,前端使用React,後端使用Spring Boot,實現就沒那麼方便了。 前端React使用fetch而非傳統的XMLHttpRequest從後端獲取
Java中實現檔案上傳下載的三種解決方案
第一點:Java程式碼實現檔案上傳 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null; String fileAddre="/numU
SpringMVC——實現檔案上傳下載
一、檔案上傳 1.引入依賴包 在pom.xml檔案中新增如下內容,引入 commons-fileupload 和 commons-io 兩個包。 <dependency> <groupId>commons-f
Flask 實現檔案上傳下載功能
檔案下載的兩種方法, 一是構建檔案url,二是使用flask.send_from_directory(directory, filename, **options),介紹第一種方法,是我寫著寫著就發現的,第二種方法就查api吧,不介紹了。 檔案下載一般都是先有一
Jsp+Servlet實現檔案上傳下載——前臺頁面開發
JSP和Servlet都是J2EE的規範,JSP全名為Java Server Pages,中文名叫java伺服器頁面,它是在傳統的網頁HTML檔案中插入Java程式段(Scriptlet
spring boot實現檔案上傳下載以及多檔案上傳
首先是很簡單的介面,在resource/static下建立檔案file.html <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymel
完整實現檔案上傳下載以及輸出下載列表
首先匯入jar包: commons-fileupload-1.2.1.jar 【檔案上傳元件核心jar包】 commons-io-1.4.jar 【封裝了對檔案處理的相關工具類】 jsp程式碼: 功能選擇: &
java實現檔案上傳下載的三種方法
JSP+Servlet 一、檔案上傳下載原理 在TCP/IP中,最早出現的檔案上傳機制是FTP。它是將檔案由客戶端傳送到伺服器的標準機制。但是在jsp程式設計中不能使用FTP方法來上傳檔案,這是由jsp的執行機制所決定的。 通過為表單元素設定Method=“post” en
JSP web 實現檔案上傳下載程式碼
jsp程式碼 實現檔案上傳下載 package util; import java.io.FileInputStream; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServle
SSM實現檔案上傳下載總結
需要在SSM環境框架搭建成功的基礎上實現。 主要參考文件: ssm檔案上傳/下載,有詳細的功能描述 http://blog.csdn.net/wjycgl/article/details/55509480 http://blog.csdn.net/nimiky/arti
java實現檔案上傳下載至ftp伺服器
以前做的一個專案,用到了檔案上傳下載至ftp伺服器,現在對其進行一下複習,比較簡單,一下就能看明白。 環境:首先,先安裝ftp伺服器,我是在win8本地用IIS配置的, 百度一下就可以找到安裝文件。 1.在你的專案目錄下建立ftp配置檔案,目錄如下圖
jspSmartUpload 實現檔案上傳下載
一、安裝篇 jspSmartUpload是由www.jspsmart.com網站開發的一個可免費使用的全功能的檔案上傳下載元件,適於嵌入執行上傳下載操作的JSP檔案中。該元件有以下幾個特點: 1、使用簡單。在JSP檔案中僅僅書寫三五行JAVA程式碼就可以搞定檔案的上傳或下載,方便。 2、能全程控制上傳。利
java web 一行程式碼實現檔案上傳下載
每當要實現檔案上傳下載的功能時,都要複製貼上拼湊程式碼。如果用了不同的框架,程式碼還不一樣,配置啥的一堆,甚是繁瑣,不喜歡。科學家們喜歡把紛繁複雜的自然現象總結為一個個簡潔的公式,我們也來試試,把上傳下載整成一行程式碼~ 花了一天時間,整了個通用
iOS開發之結合asp.net webservice實現檔案上傳下載
iOS開發中會經常用到檔案上傳下載的功能,這篇檔案將介紹一下使用asp.net webservice實現檔案上傳下載。 首先,讓我們看下檔案下載。 這裡我們下載cnblogs上的一個zip檔案。使用NSURLRequest+NSURLConnection可以很方便的實現這個功能。 同步下載檔案:
Java 使用 SFTP 實現檔案上傳下載(二)
package com.lijy.util; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraf