激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 使用Spring Boot集成FastDFS的示例代碼

使用Spring Boot集成FastDFS的示例代碼

2021-03-30 11:26純潔的微笑 Java教程

本篇文章主要介紹了使用Spring Boot集成FastDFS的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

這篇文章我們介紹如何使用Spring Boot將文件上傳到分布式文件系統FastDFS中。

這個項目會在上一個項目的基礎上進行構建。

1、pom包配置

我們使用Spring Boot最新版本1.5.9、jdk使用1.8、tomcat8.0。

?
1
2
3
4
5
<dependency>
  <groupId>org.csource</groupId>
  <artifactId>fastdfs-client-java</artifactId>
  <version>1.27-SNAPSHOT</version>
</dependency>

加入了fastdfs-client-java包,用來調用FastDFS相關的API。

2、配置文件

resources目錄下添加fdfs_client.conf文件

?
1
2
3
4
5
6
7
8
9
connect_timeout = 60
network_timeout = 60
charset = UTF-8
http.tracker_http_port = 8080
http.anti_steal_token = no
http.secret_key = 123456
 
tracker_server = 192.168.53.85:22122
tracker_server = 192.168.53.86:22122

配置文件設置了連接的超時時間,編碼格式以及tracker_server地址等信息

詳細內容參考:fastdfs-client-java

3、封裝FastDFS上傳工具類

封裝FastDFSFile,文件基礎信息包括文件名、內容、文件類型、作者等。

?
1
2
3
4
5
6
7
public class FastDFSFile {
  private String name;
  private byte[] content;
  private String ext;
  private String md5;
  private String author;
  //省略getter、setter

封裝FastDFSClient類,包含常用的上傳、下載、刪除等方法。

首先在類加載的時候讀取相應的配置信息,并進行初始化。

?
1
2
3
4
5
6
7
8
9
10
11
static {
  try {
    String filePath = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();;
    ClientGlobal.init(filePath);
    trackerClient = new TrackerClient();
    trackerServer = trackerClient.getConnection();
    storageServer = trackerClient.getStoreStorage(trackerServer);
  } catch (Exception e) {
    logger.error("FastDFS Client Init Fail!",e);
  }
}

文件上傳

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static String[] upload(FastDFSFile file) {
  logger.info("File Name: " + file.getName() + "File Length:" + file.getContent().length);
  NameValuePair[] meta_list = new NameValuePair[1];
  meta_list[0] = new NameValuePair("author", file.getAuthor());
  long startTime = System.currentTimeMillis();
  String[] uploadResults = null;
  try {
    storageClient = new StorageClient(trackerServer, storageServer);
    uploadResults = storageClient.upload_file(file.getContent(), file.getExt(), meta_list);
  } catch (IOException e) {
    logger.error("IO Exception when uploadind the file:" + file.getName(), e);
  } catch (Exception e) {
    logger.error("Non IO Exception when uploadind the file:" + file.getName(), e);
  }
  logger.info("upload_file time used:" + (System.currentTimeMillis() - startTime) + " ms");
  if (uploadResults == 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);
  return uploadResults;
}

使用FastDFS提供的客戶端storageClient來進行文件上傳,最后將上傳結果返回。

根據groupName和文件名獲取文件信息。

?
1
2
3
4
5
6
7
8
9
10
11
public static FileInfo getFile(String groupName, String remoteFileName) {
  try {
    storageClient = new StorageClient(trackerServer, storageServer);
    return storageClient.get_file_info(groupName, remoteFileName);
  } 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);
  }
  return null;
}

下載文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public static InputStream downFile(String groupName, String remoteFileName) {
  try {
    storageClient = new StorageClient(trackerServer, storageServer);
    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);
  }
  return null;
}

刪除文件

?
1
2
3
4
5
6
public static void deleteFile(String groupName, String remoteFileName)
    throws Exception {
  storageClient = new StorageClient(trackerServer, storageServer);
  int i = storageClient.delete_file(groupName, remoteFileName);
  logger.info("delete file successfully!!!" + i);
}

使用FastDFS時,直接調用FastDFSClient對應的方法即可。

4、編寫上傳控制類

從MultipartFile中讀取文件信息,然后使用FastDFSClient將文件上傳到FastDFS集群中。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public String saveFile(MultipartFile multipartFile) throws IOException {
  String[] fileAbsolutePath={};
  String fileName=multipartFile.getOriginalFilename();
  String ext = fileName.substring(fileName.lastIndexOf(".") + 1);
  byte[] file_buff = null;
  InputStream inputStream=multipartFile.getInputStream();
  if(inputStream!=null){
    int len1 = inputStream.available();
    file_buff = new byte[len1];
    inputStream.read(file_buff);
  }
  inputStream.close();
  FastDFSFile file = new FastDFSFile(fileName, file_buff, ext);
  try {
    fileAbsolutePath = FastDFSClient.upload(file); //upload to fastdfs
  } catch (Exception e) {
    logger.error("upload file Exception!",e);
  }
  if (fileAbsolutePath==null) {
    logger.error("upload file failed,please upload again!");
  }
  String path=FastDFSClient.getTrackerUrl()+fileAbsolutePath[0]+ "/"+fileAbsolutePath[1];
  return path;
}

請求控制,調用上面方法saveFile()。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@PostMapping("/upload") //new annotation since 4.3
public String singleFileUpload(@RequestParam("file") MultipartFile file,
                RedirectAttributes redirectAttributes) {
  if (file.isEmpty()) {
    redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
    return "redirect:uploadStatus";
  }
  try {
    // Get the file and save it somewhere
    String path=saveFile(file);
    redirectAttributes.addFlashAttribute("message",
        "You successfully uploaded '" + file.getOriginalFilename() + "'");
    redirectAttributes.addFlashAttribute("path",
        "file path url '" + path + "'");
  } catch (Exception e) {
    logger.error("upload file failed",e);
  }
  return "redirect:/uploadStatus";
}

上傳成功之后,將文件的路徑展示到頁面,效果圖如下:

使用Spring Boot集成FastDFS的示例代碼

在瀏覽器中訪問此Url,可以看到成功通過FastDFS展示:

使用Spring Boot集成FastDFS的示例代碼

這樣使用Spring Boot 集成FastDFS的案例就完成了。

示例代碼-github

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.ityouknow.com/springboot/2018/01/16/spring-boot-fastdfs.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费黄色一级网站 | 精品一区二区三区中文字幕老牛 | 成人毛片在线免费看 | hd极品free性xxx一护士 | 泰剧19禁啪啪无遮挡 | 黄色av一区二区三区 | 色天使中文字幕 | 在线播放免费播放av片 | 99精品视频免费 | 久久91亚洲精品久久91综合 | 国产一区二区精品免费 | 久久精品一级片 | 97zyz成人免费视频 | 日本在线视 | 午夜精品久久久久久久久久久久久蜜桃 | 成人性视频欧美一区二区三区 | 亚洲情视频 | 午夜精品毛片 | 天天操很很操 | 日本一区二区不卡在线观看 | 欧美在线观看视频网站 | 一色一情| 亚洲自拍第一 | 操操操操网 | 2021免费日韩视频网 | 免费一级a毛片在线播放视 日日草夜夜操 | 超碰97最新 | 成人污在线| 一级做人爱c黑人影片 | 亚洲成人久久精品 | 日韩美女电影 | 成人黄色免费视频 | 色综合久久久久久久久久 | 九九热国产视频 | 日本在线播放一区二区三区 | 久久精片 | 成人在线视频在线观看 | 亚洲天堂一级片 | 二区视频 | 国产羞羞网站 | 国产精品一二三区在线观看 |