国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

fastDFS實現(xiàn)文件上傳與下載

這篇具有很好參考價值的文章主要介紹了fastDFS實現(xiàn)文件上傳與下載。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

我們在做項目的時候經(jīng)常會遇到文件的上傳與下載。你們是怎么做的呢?現(xiàn)在有一個技術(shù)可以非常簡單的實現(xiàn)這個功能——fastDFS

簡介

FastDFS是一個分布式文件系統(tǒng),使用FastDFS可以非常容易搭建一套高性能的文件服務(wù)器集群提供文件上傳、下載服務(wù)。

原理

它主要包含兩個部分, Tracker serverStorage server 客戶端請求 Tracker server 進行文件上傳、下載,通過 Tracker server 調(diào)度最終由 Storage server 完成文件上傳和下載。

Tracker server主要是用來進行負載均衡和調(diào)度。其實它就是一個調(diào)度服務(wù)器,通過一些策略找到Storage server來提供文件上傳服務(wù)。而Storage server的主要作用就是用來進行文件存儲。我們上傳上來的數(shù)據(jù)最終也是存儲到Storage服務(wù)器上的。需要注意的一點就是它本身是沒有實現(xiàn)自己的文件系統(tǒng),而是利用操作系統(tǒng)上的文件系統(tǒng)來管理文件的。所以Storage被稱為存儲服務(wù)器。
fastDFS實現(xiàn)文件上傳與下載,fastdfs
文件上傳示意圖:
fastDFS實現(xiàn)文件上傳與下載,fastdfs
文件下載示意圖:
fastDFS實現(xiàn)文件上傳與下載,fastdfs

如何使用

  1. 導(dǎo)入依賴
<dependency>
    <groupId>com.github.tobato</groupId>
    <artifactId>fastdfs-client</artifactId>
    <version>1.26.7</version>
    <exclusions>
        <exclusion>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  1. 編寫配置文件
server.port=8080
# ===================================================================
# 分布式文件系統(tǒng)FDFS配置
# ===================================================================
fdfs.so-timeout = 1501
fdfs.connect-timeout = 601
#縮略圖生成參數(shù)
fdfs.thumb-image.width= 150
fdfs.thumb-image.height= 150
#TrackerList參數(shù),支持多個
fdfs.tracker-list=10.199.12.106:22122
#訪問路徑
fdfs.web-server-url=http://10.199.12.106:8888/
  1. 代碼
    創(chuàng)建一個工具類
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.domain.proto.storage.DownloadCallback;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@Component
public class FastDFSClientUtil {
    @Autowired
    private FastFileStorageClient storageClient;
    /**
     * 上傳
     * @param file 文件類
     * @return fileId 文件Id,包含group和uri的完整路徑 EG=>>MO/22/22/**.jpg
     * @throws IOException
     */
    public String uploadFile(MultipartFile file) throws IOException {
        StorePath storePath = storageClient.uploadFile((InputStream) file.getInputStream(), file.getSize(),FilenameUtils.getExtension(file.getOriginalFilename()), null);
        return storePath.getFullPath();
    }
    /**
     * 刪除
     * @param filePath 文件的fileId 包含分組,EG=>>group1/M00/22/22/***.**
     */
    public void delFile(String filePath) {
        storageClient.deleteFile(filePath);
    }
    /**
     * 下載
     * @param groupName 分組id  EG=>> group10
     * @param path 文件uri 分組之后的內(nèi)容[不含開頭的/] EG=>>MO/22/22/kkk.jpg
     * @return 文件的字節(jié)數(shù)組
     */
    public byte[] download(String groupName, String path) throws IOException {
        InputStream ins = storageClient.downloadFile(groupName, path, new DownloadCallback<InputStream>() {
            @Override
            public InputStream recv(InputStream ins) throws IOException {
                // 將此ins返回給上面的ins
                return ins;
            }
        });
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        byte[] buff = new byte[100];
        int rc = 0;
        while ((rc = ins.read(buff, 0, 100)) > 0) {
            byteArrayOutputStream.write(buff, 0, rc);
        }
        return byteArrayOutputStream.toByteArray();
    }
}

實現(xiàn)功能文章來源地址http://www.zghlxwxcb.cn/news/detail-724733.html

import com.doria.fastdfs.utils.FastDFSClientUtil;
import com.github.tobato.fastdfs.exception.FdfsServerException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
@RestController
@RequestMapping("/file")
@Slf4j
public class FileController {
    //  引入客戶端工具類
    @Autowired
    private FastDFSClientUtil fastDFSClientUtil;
    // 獲取respon稍后向前端頁面寫入圖片
    @Autowired
    private HttpServletResponse response;
    // 讀取調(diào)度服務(wù)所在服務(wù)器稍后可以進行拼接,便于下次直接填寫,這里由于nginx監(jiān)聽的是80端口,所以沒有配置端口。默認訪問80
    @Value("${fileServerUrl}")
    private String fileServerUrl;
    @PostMapping("/upload")
    public String uploadFile(MultipartFile file) {
        try {
            // 判斷文件是否存在
            if (file == null) {
                throw new RuntimeException("文件不存在");
            }
            // 獲取文件的完整名稱
            String originalFilename = file.getOriginalFilename();
            if (StringUtils.isEmpty(originalFilename)) {
                throw new RuntimeException("文件不存在");
            }
            // 獲取到返回的fileId
            String url = fastDFSClientUtil.uploadFile(file);
            // 拼接返回
            return fileServerUrl + url;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "文件上傳失敗";
    }
    // 刪除文件[這里僅作測試用,實際中不會這樣直接在controller刪除
    // 是會根據(jù)業(yè)務(wù)從數(shù)據(jù)庫中拿到url進行刪除同時刪除數(shù)據(jù)庫關(guān)聯(lián)數(shù)據(jù),注意被占用無法刪除]
    @DeleteMapping("/del")
    public String delFile(@RequestParam String fileId) {
        try {
            fastDFSClientUtil.delFile(fileId);
            return "刪除成功";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "刪除失敗";
    }
    /**
     * 文件下載,頁面直接訪問我們這個服務(wù)器,在頁面眼里,直接從我們這個服務(wù)拿到了文件,而我們?nèi)astdfs服務(wù)器獲取文件
     * 前方的ip端口我們可以固定一個服務(wù)器,ip就是當前方法所在服務(wù)器的ip,前端找到我們。我們再去給他下載轉(zhuǎn)發(fā)
     * 也可以將這個服務(wù)部署在fastdfs的本地,然后通過springcloud即時發(fā)現(xiàn)服務(wù)調(diào)用下載服務(wù)
     * @param groupName
     * @param path
     */
    @GetMapping("/download")
    public void download(@RequestParam String groupName, @RequestParam String path) {
        try {
            // 拆分獲取出文件名稱,方便一會寫入的時候?qū)懗稣_的文件名(url中的文件名和服務(wù)器中是一致的,至少默認是這樣的)
            String[] split = path.split("/");
            String imgName=split[split.length-1];
            // 設(shè)置請求頭為附件模式
            response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(imgName, "UTF-8"));
            // 調(diào)用客戶端獲取文件字節(jié)碼
            byte[] imageByte = fastDFSClientUtil.download(groupName, path);
            // 從response獲取響應(yīng)流
            ServletOutputStream outputStream = response.getOutputStream();
            // 向流寫入數(shù)據(jù)
            outputStream.write(imageByte);
            // 關(guān)流
            outputStream.close();
        }catch (FdfsServerException e){
            log.error("文件不存在");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

到了這里,關(guān)于fastDFS實現(xiàn)文件上傳與下載的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • FastDFS+Nginx - 本地搭建文件服務(wù)器同時實現(xiàn)在外遠程訪問「端口映射」

    FastDFS+Nginx - 本地搭建文件服務(wù)器同時實現(xiàn)在外遠程訪問「端口映射」

    FastDFS是一個開源的輕量級分布式文件系統(tǒng),它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務(wù),如相冊網(wǎng)站、視頻網(wǎng)站等等。 FastDFS為互聯(lián)網(wǎng)量身定制,充分考

    2024年02月11日
    瀏覽(29)
  • FastDFS+Nginx - 本地搭建文件服務(wù)器同時實現(xiàn)在外遠程訪問「內(nèi)網(wǎng)穿透」

    FastDFS+Nginx - 本地搭建文件服務(wù)器同時實現(xiàn)在外遠程訪問「內(nèi)網(wǎng)穿透」

    FastDFS是一個開源的輕量級分布式文件系統(tǒng),它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務(wù),如相冊網(wǎng)站、視頻網(wǎng)站等等。 FastDFS為互聯(lián)網(wǎng)量身定制,充分考

    2024年02月05日
    瀏覽(42)
  • FastDFS與Nginx結(jié)合搭建文件服務(wù)器,并內(nèi)網(wǎng)穿透實現(xiàn)公網(wǎng)訪問

    FastDFS與Nginx結(jié)合搭建文件服務(wù)器,并內(nèi)網(wǎng)穿透實現(xiàn)公網(wǎng)訪問

    FastDFS是一個開源的輕量級分布式文件系統(tǒng),它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務(wù),如相冊網(wǎng)站、視頻網(wǎng)站等等。 FastDFS為互聯(lián)網(wǎng)量身定制,充分考

    2024年02月01日
    瀏覽(29)
  • FastDFS+Nginx - 本地搭建文件服務(wù)器同時實現(xiàn)在外遠程訪問「端口映射」(1)

    FastDFS+Nginx - 本地搭建文件服務(wù)器同時實現(xiàn)在外遠程訪問「端口映射」(1)

    大家好,我是曉星航。今天為大家?guī)淼氖?FastDFS+Nginx 的講解!?? 轉(zhuǎn)載自cpolar極點云的文章:FastDFS與Nginx結(jié)合搭建文件服務(wù)器,并內(nèi)網(wǎng)穿透實現(xiàn)公網(wǎng)訪問 FastDFS是一個開源的輕量級分布式文件系統(tǒng),它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、

    2024年02月04日
    瀏覽(48)
  • FastDFS與Nginx結(jié)合搭建文件服務(wù)器,并實現(xiàn)公網(wǎng)訪問【內(nèi)網(wǎng)穿透】

    FastDFS與Nginx結(jié)合搭建文件服務(wù)器,并實現(xiàn)公網(wǎng)訪問【內(nèi)網(wǎng)穿透】

    FastDFS是一個開源的輕量級分布式文件系統(tǒng),它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務(wù),如相冊網(wǎng)站、視頻網(wǎng)站等等。 FastDFS為互聯(lián)網(wǎng)量身定制,充分考

    2024年02月11日
    瀏覽(43)
  • 開源輕量級分布式文件系統(tǒng)FastDFS本地部署并實現(xiàn)遠程訪問服務(wù)器

    開源輕量級分布式文件系統(tǒng)FastDFS本地部署并實現(xiàn)遠程訪問服務(wù)器

    FastDFS是一個開源的輕量級分布式文件系統(tǒng),它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務(wù),如相冊網(wǎng)站、視頻網(wǎng)站等等。 FastDFS為互聯(lián)網(wǎng)量身定制,充分考

    2024年02月04日
    瀏覽(116)
  • FastDFS文件系統(tǒng)本地部署結(jié)合Nginx與內(nèi)網(wǎng)穿透實現(xiàn)遠程訪問本地服務(wù)器

    FastDFS文件系統(tǒng)本地部署結(jié)合Nginx與內(nèi)網(wǎng)穿透實現(xiàn)遠程訪問本地服務(wù)器

    FastDFS是一個開源的輕量級分布式文件系統(tǒng),它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務(wù),如相冊網(wǎng)站、視頻網(wǎng)站等等。 FastDFS為互聯(lián)網(wǎng)量身定制,充分考

    2024年02月05日
    瀏覽(30)
  • 如何在Linux部署FastDFS文件服務(wù)并實現(xiàn)無公網(wǎng)IP遠程訪問內(nèi)網(wǎng)文件——“cpolar內(nèi)網(wǎng)穿透”

    如何在Linux部署FastDFS文件服務(wù)并實現(xiàn)無公網(wǎng)IP遠程訪問內(nèi)網(wǎng)文件——“cpolar內(nèi)網(wǎng)穿透”

    FastDFS是一個開源的輕量級分布式文件系統(tǒng),它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務(wù),如相冊網(wǎng)站、視頻網(wǎng)站等等。 FastDFS為互聯(lián)網(wǎng)量身定制,充分考

    2024年03月14日
    瀏覽(26)
  • 從零開始搭建高效的文件服務(wù)器:FastDFS與Nginx完美結(jié)合,內(nèi)網(wǎng)穿透實現(xiàn)公網(wǎng)訪問

    從零開始搭建高效的文件服務(wù)器:FastDFS與Nginx完美結(jié)合,內(nèi)網(wǎng)穿透實現(xiàn)公網(wǎng)訪問

    目錄 前言 1. 本地搭建FastDFS文件系統(tǒng) 1.1 環(huán)境安裝 1.2 安裝libfastcommon 1.3 安裝FastDFS 1.4 配置Tracker 1.5 配置Storage 1.6 測試上傳下載 1.7 與Nginx整合 1.8 安裝Nginx 1.9 配置Nginx 2. 局域網(wǎng)測試訪問FastDFS 3. 安裝cpolar內(nèi)網(wǎng)穿透 4. 配置公網(wǎng)訪問地址 5. 固定公網(wǎng)地址 5.1 保留二級子域名 5.2 配置

    2024年02月03日
    瀏覽(36)
  • FastDFS分布式文件存儲

    FastDFS分布式文件存儲

    為什么會有分布式文件系統(tǒng)? 分布式文件系統(tǒng)是面對互聯(lián)網(wǎng)的需求而產(chǎn)生。因為互聯(lián)網(wǎng)時代要對海量數(shù)據(jù)進行存儲。很顯然靠簡單的增加硬盤個數(shù)已經(jīng)滿足不了我們的要求。 因為硬盤傳輸速度有限但是數(shù)據(jù)在急劇增長,另外我們還要要做好數(shù)據(jù)備份、數(shù)據(jù)安全等。 采用分布

    2024年01月23日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包