日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

文件系统FastDFS和阿里云OSS

發布時間:2023/12/18 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件系统FastDFS和阿里云OSS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 分布式文件存儲-FastDFS
      • 1.1 FastDFS簡介
        • 1.1.1 FastDFS體系結構
        • 1.1.2 上傳流程
      • 1.2 FastDFS搭建(容器化部署)
        • 1.2.0 Vmware虛擬機配置
        • 1.2.1. 拉取鏡像
        • 1.2.2. 運行tracker
        • 1.2.3. 運行storage
        • 1.2.4. 修改nginx的配置
        • 1.2.5. 設置開機啟動容器
      • 1.3 文件存儲微服務
        • 1.3.1. 創建文件管理微服務
        • 1.3.2. 修改pom.xml引入依賴
        • 1.3.3. 創建fasfDFS的配置文件
        • 1.3.4. 創建微服務配置文件
        • 1.3.5. 創建啟動類
      • 1.4 文件上傳
        • 1.4.1 文件信息封裝
        • 1.4.2 文件操作
        • 1.4.3 文件上傳
      • 1.5 Postman測試文件上傳
    • 2. 阿里云對象存儲 - OSS
      • 2.1. 什么是對象存儲OSS
      • 2.2. 對象存儲OSS作用
      • 2.3. 對象存儲OSS中的概念
      • 2.4. 對象存儲OSS管理方式
      • 2.5. 阿里云對象存儲OSS [官網]
      • 2.6. 對象存儲OSS注冊和配置
        • 2.6.1. 注冊和登錄
        • 2.6.2. 開通對象存儲OSS服務
        • 2.6.3. 管理控制臺
        • 2.6.4. 使用控制臺上傳圖片
      • 2.7. AccessKey管理
        • 2.7.1. 什么是AccessKey
        • 2.7.2. 如何使用AccessKey
      • 2.8. OSS-Browser管理工具使用
      • 2.9. 寫代碼前準備工作
        • 2.9.1. 下載SDK安裝包
        • 2.9.2. SDK包安裝到本地maven倉庫
      • 2.10. 代碼操作使用案例
        • 2.10.1. 搭建項目環境
        • 2.10.2. 上傳文件
        • 2.10.3. 下載文件到本地目錄
        • 2.10.4. 上傳圖片并返回訪問路徑
        • 2.10.5. 刪除文件
    • 3. 總結
      • 3.1. FastDFS優缺點
      • 3.2. 阿里對象存儲OSS優缺點 :

1. 分布式文件存儲-FastDFS

1.1 FastDFS簡介

1.1.1 FastDFS體系結構

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

FastDFS為互聯網量身定制,充分考慮了冗余備份負載均衡線性擴容等機制,并注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務器集群提供文件上傳、下載等服務。
|
FastDFS 架構包括 Tracker server 和 Storage server。客戶端請求 Tracker server 進行文件上傳、下載,通過Tracker server 調度最終由 Storage server 完成文件上傳和下載。

Tracker server 作用是負載均衡調度,通過 Tracker server 在文件上傳時可以根據一些策略找到Storage server 提供文件上傳服務。可以將 tracker 稱為追蹤服務器或調度服務器。Storage server作用是文件存儲,客戶端上傳的文件最終存儲在 Storage 服務器上,Storageserver 沒有實現自己的文件系統而是利用操作系統的文件系統來管理文件。可以將storage稱為存儲服務器。

1.1.2 上傳流程

客戶端上傳文件后存儲服務器將文件 ID 返回給客戶端,此文件 ID用于以后訪問該文件的索引信息。文件索引信息包括:組名,虛擬磁盤路徑,數據兩級目錄,文件名。

組名:文件上傳后所在的 storage 組名稱,在文件上傳成功后有storage 服務器返回,需要客戶端自行保存。

虛擬磁盤路徑:storage 配置的虛擬路徑,與磁盤選項store_path對應。如果配置了

store_path0 則是 M00,如果配置了 store_path1 則是 M01,以此類推。

數據兩級目錄:storage 服務器在每個虛擬磁盤路徑下創建的兩級目錄,用于存儲數據

文件。

文件名:與文件上傳時不同。是由存儲服務器根據特定信息生成,文件名包含:源存儲

服務器 IP 地址、文件創建時間戳、文件大小、隨機數和文件拓展名等信息。

1.2 FastDFS搭建(容器化部署)

注意 :

提供的虛擬機中FastDFS已經搭建完成, 并且是開機自動啟動, 配置好虛擬機網絡后直接使用即可。

1.2.0 Vmware虛擬機配置

虛擬機ip地址固定為 : 自己默認地址

用戶名 : xxx

密碼 : xxx

  • 導入虛擬機鏡像步驟:
  • 文件菜單 -> 打開選項 -> 選擇需要打開的虛擬機鏡像文件(鏡像文件需要提前解壓)

如需使用本課程提供的虛擬機鏡像, Vmware軟件配置如下:

  • 點擊vmware軟件的編輯菜單, 虛擬網絡編輯器
  • 在彈出的框中配置如下:
  • 注意: vmware軟件中只能有一個nat模式網絡連接, 如果沒有點擊添加網絡添加一個,如果已經存在那么照著下面配置內容修改,
    子網ip必須是: 192.168.200.0

    因為虛擬機鏡像中已經將虛擬機的ip鎖死為192.168.200.128

  • 點擊Nat設置, 配置網關IP如下:
  • 虛擬機配置好后, 需要本地和虛擬機網絡連通
  • 所以在本地windows網絡適配器選項中找到 以太網8虛擬網卡進行配置.

    因為我們vmware軟件中配置的時候VMnet8, 右鍵屬性配合如下:

    注意 : 配置本地虛擬網卡的時候, ip地址一定要處于200網段

    網關一定要寫上面配置的網關地址, 否則windows本機和虛擬機網絡無法連通

  • 啟動虛擬機后在windows的cmd中可以ping服務器, 看是否能夠連通虛擬機
  • ping 192.168.200.128

    我們使用Docker容器化搭建FastDFS

    1.2.1. 拉取鏡像

    docker pull morunchang/fastdfs

    1.2.2. 運行tracker

    創建FastDFS管理端tracker容器

    docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh

    1.2.3. 運行storage

    創建FastDFS存儲端storage容器

    docker run -d --name storage --net=host -e TRACKER_IP=<your tracker server address>:22122 -e GROUP_NAME=<group name> morunchang/fastdfs sh storage.sh#創建storage容器例子: docker run -d --name storage --net=host -e TRACKER_IP=192.168.200.128:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh
    • 使用的網絡模式是–net=host
    • 其中 位置替換為你機器的Ip即可
    • 其中 是組名,即storage的組, 例如: group1, group2, group3等
    • 如果想要增加新的storage服務器,再次運行該命令,注意更換 新組名

    1.2.4. 修改nginx的配置

    進入storage的容器內部,修改nginx.conf

    # 進入到storage容器內部 docker exec -it storage /bin/bash

    進入到容器內部后

    #1. 通過命令來查詢Nginx的安裝位置: root@iZ8vb6w2xyjemtqcxtmaj4Z:/# whereis nginx #顯示如下: nginx: /etc/nginx#2. 查看當前Nginx的進程 root@iZ8vb6w2xyjemtqcxtmaj4Z:/# ps aux | grep nginx #顯示如下: root 16 0.0 0.0 32480 1480 ? Ss 13:18 0:00 nginx: master process /etc/nginx/sbin/nginx nobody 100 0.0 0.0 33036 2116 ? S 14:15 0:00 nginx: worker process root 118 0.0 0.0 11272 728 pts/1 S+ 14:54 0:00 grep --color=auto nginx

    在storage存儲端容器的nginx中添加以下內容:

    #3. 修改Nginx的配置文件 vi /etc/nginx/conf/nginx.conf#4. 修改Nginx配置內容server {listen 80;server_name localhost;location ~ /M00 {# storage 實際存儲圖片的位置root /data/fast_data/data;ngx_fastdfs_module;} }#5. 進入到Nginx sbin目錄從新加載Nginx配置文件 cd /etc/nginx/sbin#6. 重新加載配置文件, 讓nginx配置生效 ./nginx -s reload

    修改后:

    storage存儲的位置/data/fast_data/data

    1.2.5. 設置開機啟動容器

    docker update --restart=always tracker docker update --restart=always storage

    如果更新不成功,查看是否是下面錯誤

    IPv4 forwarding is disabled. Networking will not work

    解決:https://www.cnblogs.com/python-wen/p/11224828.html

    1.3 文件存儲微服務

    1.3.1. 創建文件管理微服務

    創建文件管理微服務fastdfsDemo,該工程主要用于實現文件上傳以及文件刪除等功能。

    創建微服務時, 項目為Maven項目, 不要選擇骨架.

    1.3.2. 修改pom.xml引入依賴

    <!-- 繼承Spring boot工程 --> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.5.RELEASE</version> </parent><properties><!-- 項目源碼及編譯輸出的編碼 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!-- 項目編譯JDK版本 --><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><!-- 依賴包版本管理 --><spring.boot.version>2.1.5.RELEASE</spring.boot.version><fastdfs.client.version>1.27.0.0</fastdfs.client.version> </properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring.boot.version}</version></dependency><dependency><groupId>net.oschina.zcx7878</groupId><artifactId>fastdfs-client-java</artifactId><version>${fastdfs.client.version}</version></dependency> </dependencies>

    1.3.3. 創建fasfDFS的配置文件

    在resources文件夾下創建fasfDFS的配置文件fdfs_client.conf

    connect_timeout = 60 network_timeout = 60 charset = UTF-8 http.tracker_http_port = 80 tracker_server = 192.168.200.128:22122
    • connect_timeout:連接超時時間,單位為秒。

    • network_timeout:通信超時時間,單位為秒。發送或接收數據時。假設在超時時間后還不能發送或接收數據,則本次網絡通信失敗

    • charset: 字符集

    • http.tracker_http_port :.tracker的http端口

    • tracker_server: tracker服務器IP和端口設置

    1.3.4. 創建微服務配置文件

    在resources文件夾下創建application.yml

    spring:servlet:multipart:max-file-size: 10MBmax-request-size: 10MBapplication:name: fastdfs-demo server:port: 9001

    max-file-size是單個文件大小,max-request-size是設置總上傳的數據大小

    1.3.5. 創建啟動類

    創建com.qianfeng包,創建啟動類FastDFSApplication

    package com.qianfeng;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;/*** 項目啟動類* @Author zhaojian*/ @SpringBootApplication public class FastDFSApplication {public static void main(String[] args) {SpringApplication.run(FastDFSApplication.class, args);} }

    1.4 文件上傳

    1.4.1 文件信息封裝

    文件上傳一般都有文件的名字、文件的內容、文件的擴展名、文件的md5值、文件的作者等相關屬性,我們可以創建一個對象封裝這些屬性,代碼如下:

    創建com.ymk.pojo.FastDFSFile

    package com.qianfeng.pojo;/*** 自定義封裝, 文件實體類* @Author zhaojian*/ public class FastDFSFile {//文件名字private String name;//文件內容private byte[] content;//文件擴展名private String ext;//文件MD5摘要值private String md5;//文件創建作者private String author;public FastDFSFile(String name, byte[] content, String ext, String height, String width, String author) {super();this.name = name;this.content = content;this.ext = ext;this.author = author;}public FastDFSFile(String name, byte[] content, String ext) {super();this.name = name;this.content = content;this.ext = ext;}// getter and setter ... }

    1.4.2 文件操作

    創建FastDFSClient類,放在com.ymk.util下, 在該類中實現FastDFS信息獲取以及文件的相關操作,

    代碼如下:

    package com.ymk.util;import com.ymk.pojo.FastDFSFile; import org.csource.common.NameValuePair; import org.csource.fastdfs.*; import org.slf4j.LoggerFactory; import org.springframework.core.io.ClassPathResource;import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream;/*** 上傳下載等文件操作工具類* @Author zhaojian*/ public class FastDFSClient {private static org.slf4j.Logger logger = LoggerFactory.getLogger(FastDFSClient.class);/**** 初始化加載FastDFS的TrackerServer配置*/static {try {String filePath = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();ClientGlobal.init(filePath);} catch (Exception e) {logger.error("FastDFS Client Init Fail!",e);}}/**** 文件上傳* @param file* @return*/public static String[] upload(FastDFSFile file) {//獲取文件的作者NameValuePair[] meta_list = new NameValuePair[1];meta_list[0] = new NameValuePair("author", file.getAuthor());//接收返回數據String[] uploadResults = null;StorageClient storageClient=null;try {//創建StorageClient客戶端對象storageClient = getTrackerClient();/**** 文件上傳* 1)文件字節數組* 2)文件擴展名* 3)文件作者*/uploadResults = storageClient.upload_file(file.getContent(), file.getExt(), meta_list);} catch (Exception e) {logger.error("Exception when uploadind the file:" + file.getName(), e);}if (uploadResults == null && storageClient!=null) {logger.error("upload file fail, error code:" + storageClient.getErrorCode());}//獲取組名String groupName = uploadResults[0];//獲取文件存儲路徑String remoteFileName = uploadResults[1];return uploadResults;}/**** 獲取文件信息* @param groupName:組名* @param remoteFileName:文件存儲完整名* @return*/public static FileInfo getFile(String groupName, String remoteFileName) {try {StorageClient storageClient = getTrackerClient();return storageClient.get_file_info(groupName, remoteFileName);} catch (Exception e) {logger.error("Exception: Get File from Fast DFS failed", e);}return null;}/**** 文件下載* @param groupName* @param remoteFileName* @return*/public static InputStream downFile(String groupName, String remoteFileName) {try {//創建StorageClientStorageClient storageClient = getTrackerClient();//下載文件byte[] fileByte = storageClient.download_file(groupName, remoteFileName);InputStream ins = new ByteArrayInputStream(fileByte);return ins;} catch (Exception e) {logger.error("Exception: Get File from Fast DFS failed", e);}return null;}/**** 文件刪除* @param groupName* @param remoteFileName* @throws Exception*/public static void deleteFile(String groupName, String remoteFileName)throws Exception {//創建StorageClientStorageClient storageClient = getTrackerClient();//刪除文件int i = storageClient.delete_file(groupName, remoteFileName);}/**** 獲取Storage組* @param groupName* @return* @throws IOException*/public static StorageServer[] getStoreStorages(String groupName)throws IOException {//創建TrackerClientTrackerClient trackerClient = new TrackerClient();//獲取TrackerServerTrackerServer trackerServer = trackerClient.getConnection();//獲取Storage組return trackerClient.getStoreStorages(trackerServer, groupName);}/**** 獲取Storage信息,IP和端口* @param groupName* @param remoteFileName* @return* @throws IOException*/public static ServerInfo[] getFetchStorages(String groupName,String remoteFileName) throws IOException {TrackerClient trackerClient = new TrackerClient();TrackerServer trackerServer = trackerClient.getConnection();return trackerClient.getFetchStorages(trackerServer, groupName, remoteFileName);}/**** 獲取Tracker服務地址* @return* @throws IOException*/public static String getTrackerUrl() throws IOException {return "http://"+getTrackerServer().getInetSocketAddress().getHostString()+":"+ ClientGlobal.getG_tracker_http_port()+"/";}/**** 獲取Storage客戶端* @return* @throws IOException*/private static StorageClient getTrackerClient() throws IOException {TrackerServer trackerServer = getTrackerServer();StorageClient storageClient = new StorageClient(trackerServer, null);return storageClient;}/**** 獲取Tracker* @return* @throws IOException*/private static TrackerServer getTrackerServer() throws IOException {TrackerClient trackerClient = new TrackerClient();TrackerServer trackerServer = trackerClient.getConnection();return trackerServer;} }

    1.4.3 文件上傳

    創建一個FileController,在該控制器中實現文件上傳操作,代碼如下:

    package com.ymk.controller;import com.ymk.pojo.FastDFSFile; import com.ymk.util.FastDFSClient; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile;import java.io.IOException;/*** 文件操作controller接口* @Author zhaojian*/ @RestController @CrossOrigin @RequestMapping("/file") public class FileController {/*** 上傳接口* @param file 接收文件參數, 參數名必須叫做file* @Author zhaojian*/@PostMapping("/upload")public String upload(@RequestParam("file") MultipartFile file) {String path ="";try {path=saveFile(file);System.out.println(path);} catch (Exception e) {e.printStackTrace();}return path;}/*** 上傳文件到FastDFS分布式文件系統* @param multipartFile* @Author zhaojian*/public String saveFile(MultipartFile multipartFile) throws IOException {//1. 獲取文件名String fileName = multipartFile.getOriginalFilename();//2. 獲取文件內容byte[] content = multipartFile.getBytes();//3. 獲取文件擴展名String ext = "";if (fileName != null && !"".equals(fileName)) {ext = fileName.substring(fileName.lastIndexOf("."));}//4. 創建文件實體類對象FastDFSFile fastDFSFile = new FastDFSFile(fileName, content, ext);//5. 上傳String[] uploadResults = FastDFSClient.upload(fastDFSFile);//6. 拼接上傳后的文件的完整路徑和名字, uploadResults[0]為組名, uploadResults[1]為文件名稱和路徑String path = FastDFSClient.getTrackerUrl() + uploadResults[0] + "/" + uploadResults[1];//7. 返回return path;} }

    1.5 Postman測試文件上傳

    步驟:

    1、選擇post請求方式,輸入請求地址 http://localhost:9001/file/upload

    2、填寫Headers

    Key:Content-Type Value:multipart/form-data

    3、填寫body

    選擇form-data 然后選擇文件file 點擊添加文件,最后發送即可。

    postman填寫信息如下:

    注意Headers請求頭中內容

    注意body請求體中內容:

    上傳結果可以通過瀏覽器訪問顯示如下:

    2. 阿里云對象存儲 - OSS

    2.1. 什么是對象存儲OSS

    阿里云對象存儲OSS(Object Storage Service)是阿里云提供的海量安全低成本高持久的云存儲服務。其數據設計持久性不低于99.9999999999%(12個9),服務可用性(或業務連續性)不低于99.995%。

    OSS具有與平臺無關的RESTful API接口,您可以在任何應用、任何時間、任何地點存儲和訪問任意類型的數據

    您可以使用阿里云提供的API、SDK接口或者OSS遷移工具輕松地將海量數據移入或移出阿里云OSS。數據存儲到阿里云OSS以后,您可以選擇標準存儲(Standard)作為移動應用、大型網站、圖片分享或熱點音視頻的主要存儲方式,也可以選擇成本更低、存儲期限更長的低頻訪問存儲(Infrequent
    Access)、歸檔存儲(Archive)、冷歸檔存儲(Cold Archive)作為不經常訪問數據的存儲方式。

    2.2. 對象存儲OSS作用

    • 阿里云對象存儲OSS簡單的說就是我們花錢在阿里購買存儲空間

    • 然后我們可以將項目中的圖片文件等資源存儲在對象存儲OSS服務器上

    • 對象存儲OSS提供對文件的上傳,下載, 刪除等管理操作

    • 這樣我們就省去了購買存儲服務器, 搭建存儲服務器, 運營管理存儲服務器的繁瑣操作.

    • 本方案適用于中小型規模公司, 對于并發量, 存儲的數據量不大的情況下使用, 因為如果高并發大數據量阿里雖然也支持,

    • 但是每年付出的費用相當昂貴, 這個時候可以選用FastDFS自己去購買服務器搭建并運營管理. 則更省錢.

    2.3. 對象存儲OSS中的概念

    • 存儲類型(Storage Class)

    OSS提供標準、低頻訪問、歸檔、冷歸檔四種存儲類型,全面覆蓋從熱到冷的各種數據存儲場景。其中標準存儲類型提供高持久、高可用、高性能的對象存儲服務,能夠支持頻繁的數據訪問;低頻訪問存儲類型適合長期保存不經常訪問的數據(平均每月訪問頻率1到2次),存儲單價低于標準類型;歸檔存儲類型適合需要長期保存(建議半年以上)的歸檔數據;冷歸檔存儲適合需要超長時間存放的極冷數據。

    • 存儲空間(Bucket)

    存儲空間是您用于存儲對象(Object)的容器,所有的對象都必須隸屬于某個存儲空間。存儲空間具有各種配置屬性,包括地域、訪問權限、存儲類型等。您可以根據實際需求,創建不同類型的存儲空間來存儲不同的數據。

    • 對象(Object)

    對象是OSS存儲數據的基本單元,也被稱為OSS的文件。對象由元信息(Object
    Meta)、用戶數據(Data)和文件名(Key)組成。對象由存儲空間內部唯一的Key來標識。對象元信息是一組鍵值對,表示了對象的一些屬性,例如最后修改時間、大小等信息,同時您也可以在元信息中存儲一些自定義的信息。

    • 地域(Region)

    地域表示OSS的數據中心所在物理位置。您可以根據費用、請求來源等選擇合適的地域創建Bucket。

    • 訪問域名(Endpoint)

    Endpoint表示OSS對外服務的訪問域名。OSS以HTTP RESTful
    API的形式對外提供服務,當訪問不同地域的時候,需要不同的域名。通過內網和外網訪問同一個地域所需要的域名也是不同的。

    • 訪問密鑰(AccessKey)

    AccessKey簡稱AK,指的是訪問身份驗證中用到的AccessKey ID和AccessKey
    Secret。OSS通過使用AccessKey ID和AccessKey
    Secret對稱加密的方法來驗證某個請求的發送者身份。AccessKey ID用于標識用戶;AccessKey
    Secret是用戶用于加密簽名字符串和OSS用來驗證簽名字符串的密鑰,必須保密。

    2.4. 對象存儲OSS管理方式

    OSS提供多種靈活的上傳、下載和管理方式。

    • 通過控制臺管理OSS

      OSS提供了Web服務頁面,您可以登錄OSS控制臺管理您的OSS資源。

    • 通過API或SDK管理OSS

      OSS提供RESTful API和各種語言的SDK開發包,方便您快速進行二次開發。

    • 通過工具管理OSS

      OSS提供圖形化管理工具ossbrowser、命令行管理工具ossutil、FTP管理工具ossftp等各種類型的管理工具。

    • 通過云存儲網關管理OSS

      OSS的存儲空間內部是扁平的,沒有文件系統的目錄等概念,所有的對象都直接隸屬于其對應的存儲空間。如果您想要像使用本地文件夾和磁盤那樣來使用OSS存儲服務,可以通過配置云存儲網關來實現。

    2.5. 阿里云對象存儲OSS [官網]

    阿里云對象存儲OSS官網地址 :

    https://cn.aliyun.com/product/oss

    阿里云對象存儲OSS在線文檔地址:

    https://help.aliyun.com/product/31815.html?spm=5176.19720258.J_2686872250.3.54212c4ac3QCCP

    2.6. 對象存儲OSS注冊和配置

    2.6.1. 注冊和登錄

    進入官網后, 首先就是注冊和登錄, 可以使用支付寶登錄, 阿里云手機客戶端掃碼登錄, 賬號密碼登錄, 阿里云提供多種登錄形式。

    2.6.2. 開通對象存儲OSS服務

    • 首先找到阿里云的對象存儲OSS服務進入

    • 點擊開通按鈕進行開通對象存儲OSS服務

    2.6.3. 管理控制臺

    • 注冊, 登錄, 開通OSS服務后點擊管理控制臺, 進入控制臺界面

    • 進入到控制臺界面

    • 創建Bucket桶, 點擊Bucket列表菜單, 點擊創建Bucket按鈕, 按照下面內容填寫:

    2.6.4. 使用控制臺上傳圖片

    • 創建完Bucket桶后就可以使用控制臺上傳圖片進行測試了, 上傳操作如下:

    • 成功上傳結果如下:

    2.7. AccessKey管理

    2.7.1. 什么是AccessKey

    寫代碼的時候, 需要在項目配置文件中配置自己阿里云服務的賬號和密碼,如果寫真實的支付寶賬號密碼會造成賬號密碼泄露, 不安全,所以創建AccessKey也就是在當前賬戶下, 創建子賬戶和密碼使用, 可以隨時更換, 啟用, 停用。

    2.7.2. 如何使用AccessKey

    • 鼠標懸停在那個小人的頭像上不動, 就會出現下面菜單, 然后點擊AccessKey管理

    • 點擊繼續使用AccessKey

    • 點擊創建AccessKey創建密鑰對

    • 查看生成后的密鑰對, 一定要復制保存下來, 一會寫代碼的時候需要用到

    2.8. OSS-Browser管理工具使用

    在資料的 軟件文件夾 中有兩個壓縮包, 就是OSS-Browser工具, 此工具為阿里提供的管理對象存儲OSS的桌面工具.
    下面演示以Windows版本為例

    • oss-browser-mac-x64.zip 為mac版本

    • oss-browser-win32-x64.zip 為windows版本

    • 解壓windows版本后, 看到下面內容, oss-browser.exe為此工具啟動文件

    • 啟動后, 輸入子賬戶名稱和密碼進行登錄, 也就是AccessKey和AccessSecret

    • 進入后, 可以點擊 新建Bucket按鈕, 創建桶, 填寫內容如下, 也可以對桶進行維護操作

    • 創建好桶后, 點擊桶, 可以進入桶中

    • 在桶中, 可以使用文件按鈕上傳文件, 對上傳的文件還有下載和刪除功能可以使用, 對文件進行維護管理

    2.9. 寫代碼前準備工作

    2.9.1. 下載SDK安裝包

    阿里云對象存儲OSS在線文檔地址:

    https://help.aliyun.com/product/31815.html?spm=5176.19720258.J_2686872250.3.54212c4ac3QCCP

    2.9.2. SDK包安裝到本地maven倉庫

    • 將下載的SDK安裝包解壓, 然后安裝到本地的maven倉庫, 命令如下:
    mvn install:install-file -DgroupId=com.aliyun.oss -DartifactId=aliyun-sdk-oss -Dversion=3.10.2 -Dpackaging=jar -Dfile=aliyun-sdk-oss-3.10.2.jar

    命令解釋如下:

    mvn install:install-file //安裝到maven本地倉庫命令

    • DgroupId=com.aliyun.oss //pom文件坐標的groupId

    • DartifactId=aliyun-sdk-oss //pom文件坐標的artifactId

    • Dversion=3.10.2 //版本號

    • Dpackaging=jar //打包方式

    • Dfile=aliyun-sdk-oss-3.10.2.jar //解壓后的jar包

    2.10. 代碼操作使用案例

    2.10.1. 搭建項目環境

    • 創建項目名稱為aliyunossDemo, maven項目, 不要選擇骨架.
    • 在pom.xml中導入依賴
    <!-- 繼承Spring boot工程 --> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.5.RELEASE</version> </parent><properties><!-- 項目源碼及編譯輸出的編碼 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!-- 項目編譯JDK版本 --><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><!-- 依賴包版本管理 --><spring.boot.version>2.1.5.RELEASE</spring.boot.version><aliyun-oss-version>3.10.2</aliyun-oss-version><httpcore-verison>4.4.3</httpcore-verison><httpclient-version>4.5.1</httpclient-version> </properties><dependencies><!-- Spring boot starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring.boot.version}</version></dependency><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>${aliyun-oss-version}</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>${httpcore-verison}</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>${httpclient-version}</version></dependency> </dependencies>

    JDK如果是1.9或者以上版本需要加入jaxb相關依賴, 其他JDK版本不需要.

    <dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version> </dependency> <dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version> </dependency> <!-- no more than 2.3.3--> <dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version> </dependency>
    • 在resources目錄下創建application.yml配置文件
    spring:servlet:multipart:max-file-size: 10MBmax-request-size: 10MBapplication:name: aliyun-oss-demo server:port: 9001 aliyun:oss:#服務器地址, 我選擇的是華北2-北京地址如下endpoint: http://oss-cn-beijing.aliyuncs.com#子賬戶名稱accessKeyId: 就不告訴你#子賬戶密碼accessKeySecret: 就不告訴你#自己創建的桶的名字bucketName: qianfeng-file
    • 創建啟動類AliyunOssApplication.java
    package com.qianfeng;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;/*** 微服務啟動類* @Author zhaojian*/ @SpringBootApplication public class AliyunOssApplication {public static void main(String[] args) {SpringApplication.run(AliyunOssApplication.class, args);} }
    • 創建com.ymk.util包, 放入文件操作工具類AliyunOSSUtil.java
    package com.ymk.util;import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClient; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.*;import java.io.ByteArrayInputStream; import java.io.File; import java.io.InputStream; import java.util.Date;/*** 阿里云OSS上傳,下載, 刪除文件工具類* @Author zhaojian*/ public class AliyunOSSUtil {/*** byte數組格式上傳文件* @param endpoint OSS對外服務的訪問域名* @param accessKeyId accessKey賬號* @param accessKeySecret accessKey密碼* @param bucketName 桶名字* @param objectName 完整文件名, 例如abc/efg/123.jpg* @param content 文件內容, byte數組格式* @Author zhaojian*/public static void uploadByByteArrayFile(String endpoint,String accessKeyId,String accessKeySecret,String bucketName,String objectName,byte[] content) throws Exception {// 創建OSSClient實例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);//創建上傳請求對象PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(content));// 上傳PutObjectResult putObjectResult = ossClient.putObject(putObjectRequest);// 關閉OSSClient。ossClient.shutdown();}/*** 輸入流格式上傳文件* @param endpoint OSS對外服務的訪問域名* @param accessKeyId accessKey賬號* @param accessKeySecret accessKey密碼* @param bucketName 桶名字* @param objectName 完整文件名, 例如abc/efg/123.jpg* @param content 文件內容, 輸入流格式* @Author zhaojian*/public static void uploadByInputStreamFile(String endpoint,String accessKeyId,String accessKeySecret,String bucketName,String objectName,InputStream content) {// 創建OSSClient實例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 上傳ossClient.putObject(bucketName, objectName, content);// 關閉OSSClientossClient.shutdown();}/*** byte數組格式上傳文件并返回上傳后的URL地址* @param endpoint OSS對外服務的訪問域名* @param accessKeyId accessKey賬號* @param accessKeySecret accessKey密碼* @param bucketName 桶名字* @param objectName 完整文件名, 例如abc/efg/123.jpg* @param content 文件內容, byte數組格式* @Author zhaojian*/public static String uploadImage(String endpoint,String accessKeyId,String accessKeySecret,String bucketName,String objectName,byte[] content) throws Exception {// 創建OSSClient實例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 創建上傳文件的元信息,可以通過文件元信息設置HTTP header(設置了才能通過返回的鏈接直接訪問)。ObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setContentType("image/jpg");// 文件上傳ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content), objectMetadata);// 設置URL過期時間為1小時。Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);//返回url地址String url = ossClient.generatePresignedUrl(bucketName, objectName, expiration).toString();//關閉OSSClient。ossClient.shutdown();return url;}/*** 下載文件到本地* @param endpoint OSS對外服務的訪問域名* @param accessKeyId accessKey賬號* @param accessKeySecret accessKey密碼* @param bucketName 桶名字* @param objectName 完整文件名, 例如abc/efg/123.jpg* @param localFile 下載到本地文件目錄* @Author zhaojian*/public static void downFile(String endpoint,String accessKeyId,String accessKeySecret,String bucketName,String objectName,String localFile) throws Exception {// 創建OSSClient實例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 下載OSS文件到本地文件。如果指定的本地文件存在會覆蓋,不存在則新建。ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(localFile));// 關閉OSSClient。ossClient.shutdown();}/*** 刪除文件* @param endpoint OSS對外服務的訪問域名* @param accessKeyId accessKey賬號* @param accessKeySecret accessKey密碼* @param bucketName 桶名字* @param objectName 完整文件名, 例如abc/efg/123.jpg* @Author zhaojian*/public static void deleteFile(String endpoint,String accessKeyId,String accessKeySecret,String bucketName,String objectName) {// 創建OSSClient實例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 刪除文件。如需刪除文件夾,請將ObjectName設置為對應的文件夾名稱。如果文件夾非空,則需要將文件夾下的所有object刪除后才能刪除該文件夾。ossClient.deleteObject(bucketName, objectName);// 關閉OSSClient。ossClient.shutdown();} }

    2.10.2. 上傳文件

    package com.ymk.controller;import com.ymk.util.AliyunOSSUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile;/*** 文件管理接口* 提供文件各種形式上傳, 下載, 刪除等操作* @Author zhaojian*/ @RestController @RequestMapping("/file") public class FileManagerController {//OSS服務器訪問域名@Value("${aliyun.oss.endpoint}")private String endpoint;//子賬戶名@Value("${aliyun.oss.accessKeyId}")private String accessKeyId;//子賬戶密碼@Value("${aliyun.oss.accessKeySecret}")private String accessKeySecret;//桶名字@Value("${aliyun.oss.bucketName}")private String bucketName;/*** byte數組形式上傳* @param file* @Author zhaojian*/@PostMapping("/upload1")public void upload(@RequestParam("file") MultipartFile file) throws Exception {AliyunOSSUtil.uploadByByteArrayFile(endpoint, accessKeyId, accessKeySecret, bucketName, file.getOriginalFilename(), file.getBytes());}/*** 輸入流形式上傳* @param file* @Author zhaojian*/@PostMapping("/upload2")public void upload2(@RequestParam("file") MultipartFile file) throws Exception {AliyunOSSUtil.uploadByInputStreamFile(endpoint, accessKeyId, accessKeySecret, bucketName, file.getOriginalFilename(), file.getInputStream());} }

    2.10.3. 下載文件到本地目錄

    /*** 下載文件到本地* @param objName 需要下載的對象名稱* @param filePath 將對象下載到本地的路徑和文件名, 重名則覆蓋. * 例如: F:\test\7.jpg* @Author zhaojian*/ @GetMapping("/download") public void download(String objName, String filePath) throws Exception {AliyunOSSUtil.downFile(endpoint, accessKeyId, accessKeySecret, bucketName, objName, filePath); }

    2.10.4. 上傳圖片并返回訪問路徑

    /*** 上傳圖片并返回上傳后的URL地址* @param file* @Author zhaojian*/ @PostMapping("/upload3") public String upload3(@RequestParam("file") MultipartFile file) throws Exception {String url = AliyunOSSUtil.uploadImage(endpoint, accessKeyId, accessKeySecret, bucketName, file.getOriginalFilename(), file.getBytes());System.out.println("=====" + url);return url; }

    2.10.5. 刪除文件

    /*** 刪除文件* @param objName 需要刪除的對象名稱* @Author zhaojian*/ @DeleteMapping("/delete") public void deleteFile(String objName) {AliyunOSSUtil.deleteFile(endpoint, accessKeyId, accessKeySecret, bucketName, objName); }

    3. 總結

    3.1. FastDFS優缺點

    優點 :

    • Tracker管理端和Storage存儲端服務器都有心跳檢測機制, 高可用

    • Storage存儲端服務器, 主機和備機自動同步數據, 冗余備份, 容災性強

    • Tracker管理端服務器具有對Storage存儲端服務器負載均衡的功能, 可以抗高并發.

    • Storage存儲端服務器具有線性擴容功能, 理論上FastDFS存儲容量無上限, 實時擴容.

    缺點 :

    • 費錢

    • FastDFS分布式文件系統對服務器需求量大

    • 搭建FastDFS需要自己搭建機房, 并且運維.

    • 如果存儲數據量不是特別大, 成本則無法降低.

    使用場景 :

    適合大公司,自有IDC機房. 數據量和并發量得有一定規模才適用.

    3.2. 阿里對象存儲OSS優缺點 :

    優點 :

    • 支持高并發

    • 支持海量數據

    • 支持高可用, 高可靠.

    • 以上特點都由阿里對象存儲OSS提供保障, 無需自己運維.

    缺點 :

    • 數據量和并發量不高的情況下, 費用適中.

    • 并發和數據量越大越貴. 這個時候不如自己購買服務器搭建FastDFS分布式文件系統使用

    使用場景 :

    • 適合中小型公司, 數據量不大,并發不高情況使用.

    • 并不是阿里OSS不支持高并發和大數據量, 而是并發越高, 數據量越大, 越貴.

    總結

    以上是生活随笔為你收集整理的文件系统FastDFS和阿里云OSS的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产免费又爽又色又粗视频 | 新亚洲天堂 | 熊猫电影yy8y全部免费观看 | 亚洲自拍第二页 | 国产97色 | 久久国产精彩视频 | caopor在线 | 国产a久久| 人人看人人艹 | 大陆极品少妇内射aaaaa | 国产aa视频 | 麻豆影视在线免费观看 | 日本免费三片在线播放 | 伊人色综合久久天天 | 四季av日韩精品一区 | 在线播放精品 | 在线欧美一区二区 | 尤物精品在线 | 亚洲丝袜在线观看 | 日本黄色视屏 | 国产又粗又猛又爽又黄视频 | 91噜噜噜 | 韩国精品一区二区 | 久久伊人草 | 日日干日日干 | 一区二区三区国产 | 樱花影院电视剧免费 | 岛国精品一区二区 | 国产性生活网站 | 免费色播 | 欧美色淫 | 亚洲天堂伊人网 | 五月综合视频 | 青娱乐在线播放 | 久久网站视频 | 国产乡下妇女做爰视频 | 在线观看色网 | 亚洲va欧美va| 亚洲精品日韩精品 | 亚洲涩色 | 欧美三日本三级少妇三99 | 中文字幕免费在线观看视频 | 激情久久网 | 久久久久久久久精 | 一女三黑人理论片在线 | 午夜激情影视 | 69视频一区 | 国产精品成人av久久 | 国产麻豆一区 | 国产系列在线观看 | 国产99久一区二区三区a片 | 国产欧美日韩一区二区三区 | 国产三级精品三级 | 日韩欧美精品久久 | av天天在线 | 天天综合一区 | 欧美激情日韩 | 新91在线 | 久久国产加勒比精品无码 | 日本黄色录象 | 日韩三级中文字幕 | 理论视频在线观看 | 国产另类视频 | www.久久色 | 久久成人福利视频 | 欧美另类在线观看 | 人妻无码中文久久久久专区 | 欧美第一精品 | 国产精品夜夜夜爽张柏芝 | 国产精品免费观看视频 | 亚洲第一页夜 | 日本少妇作爱视频 | 特级毛片在线 | 亚洲欧美91 | 四虎永久免费地址 | 国产精品999| 嫩草伊人久久精品少妇av | 欧美性猛交ⅹxx乱大交 | 亚洲涩视频 | 色欲av无码精品一区 | 91婷婷| 少妇特殊按摩高潮惨叫无码 | 欧美激情在线 | 国产精品普通话 | 日韩av大片| 老鸭窝久久| 日韩欧美视频网站 | 曰本无码人妻丰满熟妇啪啪 | 五月天婷婷激情 | 美女隐私免费网站 | 午夜在线观看av | 黑花全肉高h湿play短篇 | 久久99中文字幕 | 欧美激情亚洲色图 | 天天色天天搞 | 日本高清视频一区二区 | 久久精品日韩 | 在线播放不卡 | 粉嫩av一区二区三区免费观看 |