Go語言實現FastDFS分布式存儲系統WebAPI網關

前言

  工作需要,第一次使用 Go 來實戰項目。

  需求:采用 golang 實現一個 webapi 的中轉網關,將一些資源文件通過 http 協議上傳至 FastDFS 分布式文件存儲系統。

?

一、FastDFS 與 golang 對接的代碼

  github:https://github.com/weilaihui/fdfs_client

  源代碼可以 clone 下來看看,go 語法很簡單

  基本使用:(client_test.go 中有 test 案例代碼)  

package mainimport ("fmt""io/ioutil""github.com/weilaihui/fdfs_client"
)func main() {ff, _ := ioutil.ReadFile("1.jpg")fmt.Println("image len:", len(ff))/*hosts := []string{"10.0.1.32"}port := 22122minConns := 10maxConns := 150connPool,_ := fdfs_client.NewConnectionPool(hosts, port, minConns, maxConns)*/path := "client.conf"fds, error := fdfs_client.NewFdfsClient(path)if fds == nil {fmt.Println("conn error: %s", error)var test stringfmt.Scanln(&test)return}uploadResponse, err := fds.UploadByBuffer(ff, "jpg")if uploadResponse == nil {fmt.Println("upload error: %s", err)var test stringfmt.Scanln(&test)return}fmt.Println("group name:", uploadResponse.GroupName)fmt.Println("remote file id:", uploadResponse.RemoteFileId)var test stringfmt.Scanln(&test)
}

?

二、簡單的 WebAPI 網關

  beego 框架 go 圈很有名氣,國內大學著作,考慮到這次工程較小,暫未使用起來。

  go 實現一個 api 網關也是相當的簡單:

package mainimport ("fmt""net/http"
"io/ioutil"
)func main() {http.HandleFunc("/", func(rw http.ResponseWriter, req *http.Request) {rw.Write([]byte("Hello go web"))})http.HandleFunc("/upload", upload)http.ListenAndServe("localhost:8888", nil)fmt.Println("End.")
}func upload(rw http.ResponseWriter, req *http.Request) {    fmt.Println("Header", req.Header)fmt.Println("Content-Type", req.Header.Get("Content-Type"))fmt.Println("Body", req.Body)
// 獲取 body 的全部內容
   /*
len := req.ContentLength
body := make([]byte, len)
req.Body.Read(body)
rw.Write([]byte("Response Body ...."))
   */
data, _ := ioutil.ReadAll(req.Body)
}

?

PS:以上代碼只是自己筆記使用,因為剛入手 go 不熟,僅供學習。

文件上傳中轉,如果是較大的文件,則采用將數據分片傳輸的方式進行。

轉載于:https://www.cnblogs.com/loongsoft/p/9323235.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389114.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389114.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389114.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

builder 模式

首先提出幾個問題: 什么是Builder模式?為什么要使用Builder模式?它的優點是什么,那缺點呢?什么情況下使用Builder模式? 關于Builder模式在代碼中用的很多,比如AlertDialog, OkHttpClient等。一…

工作失職的處理決定_工作失職的處理決定

精品文檔2016全新精品資料-全新公文范文-全程指導寫作–獨家原創1/3工作失職的處理決定失職是指工作人員對本職工作不認真負責,未依照規定履行自己的職務,致使單位或服務對象造成損失的行為。關于工作失職的處理決定該怎么寫呢?下面學習啦小編給大家帶來…

venn diagram_Venn Diagram Python軟件包:Vennfig

venn diagram目錄 (Table of Contents) Introduction 介紹 Installation 安裝 Default Functions 默認功能 Parameters 參量 Examples 例子 Conclusion 結論 介紹 (Introduction) In the last article, I showed how to draw basic Venn diagrams using matplotlib_venn.在上一…

應用程序的主入口點應用程序的主入口點應用程序的主入口點

/// <summary>/// 應用程序的主入口點。/// </summary>[STAThread]static void Main(string[] args){Stream stream Assembly.GetExecutingAssembly().GetManifestResourceStream("CapApp.TestApp.exe");byte[] bs new byte[stream.Length];stream.Rea…

創夢天地通過聆訊:上半年經營利潤1.3億 騰訊持股超20%

雷帝網 雷建平 11月23日報道時隔半年后&#xff0c;樂逗游戲母公司創夢天地終于通過上市聆訊&#xff0c;這意味著創夢天地很快將在港交所上市。創夢天地聯合保薦人包括瑞信、招商證券國際、中金公司。當前&#xff0c;創夢天地運營的游戲包括《夢幻花園》、《快樂點點消》、《…

PyCharm之python書寫規范--消去提示波浪線

強迫癥患者面對PyCharm的波浪線是很難受的&#xff0c;針對如下代碼去除PyCharm中的波浪線&#xff1a; # _*_coding:utf-8_*_ # /usr/bin/env python3 A_user "lin" A_password "lin123"for i in range(3): # 循環次數為3name input("請輸入你的…

關于java static 關鍵字

當我們創建類時會指出哪個類的對象的外觀與行為。 一般的流程是用new 創建這個類的對象&#xff0c;然后生成數據的存儲空間&#xff0c;并使用相應的方法。 但以下兩種情況不太適合這個流程&#xff1a; 只想用一個存儲區域來保存一個特定的數據—–無論要創建多少個對象&a…

plotly django_使用Plotly為Django HTML頁面進行漂亮的可視化

plotly djangoHello everyone! Recently I had to do some visualizations for my university project, I’ve done some googling and haven’t found any simple guides on how to put Plotly plots on an HTML page.大家好&#xff01; 最近&#xff0c;我不得不為我的大學項…

roce和iwarp_VIA、IB、RDMA、RoCE、iWARP、DPDK的發展與糾纏?

VIA(Virtual Interface Architecture): 這個只是一個標準&#xff0c;基本上不要了解太多。樓主的問題可以細分成2個層次考慮。一個是網絡環境&#xff0c;二是具體的協議和實現。一、網絡環境IB(InfiniBand): 是一種網絡環境&#xff0c;做對比的是以太網, IB往往用于高性能集…

remoting

原文地址&#xff1a;http://blog.csdn.net/chengking/archive/2005/10/26/517349.aspx (一).說明 一個遠程調用示例. 此示例實現功能: 客房端調用遠程方法&#xff08;遠程方法可以彈 出自定義信息&#xff09;&#xff0c;實現發送信息功能. 實現原理概是這樣的…

handler 消息處理機制

關于handler消息處理機制&#xff0c;只要一提到&#xff0c;相信作為一個android工程師&#xff0c;腦海就會有這么一個流程 大家都滾瓜爛熟了&#xff0c;但別人問到幾個問題&#xff0c;很多人還是栽到這個“爛”上面&#xff0c;比如&#xff1a; 一個線程是如何對應一個L…

es6簡單介紹

let和const 原先聲明變量的形式 var test 5; //全局變量 function a() {var cc3; //局部變量alert(test); } function b(){alert(test);}test 5;//全局變量 function a() {aa3; //全局變量alert(test); } 在es6之前&#xff0c;作用域只有全局作用域和函數作用域&#xff0…

軟件工程方法學要素含義_日期時間數據的要素工程

軟件工程方法學要素含義According to Wikipedia, feature engineering refers to the process of using domain knowledge to extract features from raw data via data mining techniques. These features can then be used to improve the performance of machine learning a…

洛谷P1605:迷宮(DFS)

題目背景 迷宮 【問題描述】 給定一個N*M方格的迷宮&#xff0c;迷宮里有T處障礙&#xff0c;障礙處不可通過。給定起點坐標和終點坐標&#xff0c;問: 每個方格最多經過1次&#xff0c;有多少種從起點坐標到終點坐標的方案。在迷宮中移動有上下左右四種方式&#xff0c;每次只…

vue圖片壓縮不失真_圖片壓縮會失真?快試試這幾個無損壓縮神器。

前端通常在做網頁的時候 會出現圖片加載慢的情況 在這里我通常會將圖片進行壓縮 但是通常情況下 觀眾會認為 圖片壓縮會出現失真的現象 在這里我會向大家推薦幾款圖片壓縮的工具 基本上會實現無損壓縮1.TinyPng地址&#xff1a;https://tinypng.comEnglish&#xff1f;不要慌&a…

remoteing2

此示例主要演示了net remoting,其中包含一個服務器程序Server.exe和一個客戶端程序CAOClient.exe。客戶端程序會通過http channel調用服務器端RemoteType.dll的對象和方法。服務器端的代碼文件由下圖所述&#xff1a;Server.cs源代碼 :using System;using System.Runtime.Remot…

android 線程池

為什么用線程池 創建/銷毀線程伴隨著系統開銷&#xff0c;過于頻繁的創建/銷毀線程&#xff0c;會很大程度上影響處理效率 例如&#xff1a; 記創建線程消耗時間T1&#xff0c;執行任務消耗時間T2&#xff0c;銷毀線程消耗時間T3 如果T1T3>T2&#xff0c;那么是不是說開…

datatable轉化泛型

public class ConvertHelper<T>where T:new() { /// <summary> /// 利用反射和泛型 /// </summary> /// <param name"dt"></param> /// <returns></returns> public static List<T> ConvertToList(DataTable dt) { …

【躍遷之路】【651天】程序員高效學習方法論探索系列(實驗階段408-2018.11.24)...

(收集箱&#xff08;每日一記&#xff0c;每周六整理&#xff09;)專欄 實驗說明 從2017.10.6起&#xff0c;開啟這個系列&#xff0c;目標只有一個&#xff1a;探索新的學習方法&#xff0c;實現躍遷式成長實驗期2年&#xff08;2017.10.06 - 2019.10.06&#xff09;我將以自己…

更換mysql_Docker搭建MySQL主從復制

Docker搭建MySQL主從復制 主從服務器上分別安裝Docker 1.1 Docker 要求 CentOS 系統的內核版本高于 3.10 [rootlocalhost ~]# uname -r 3.10.0-693.el7.x86_641.2 確保 yum 包更新到最新。 [rootlocalhost ~]# sudo yum update Loaded plugins: fastestmirror, langpacks Loadi…