Go语言实现FastDFS分布式存储系统WebAPI网关

loongsoft · · 2409 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前言

  工作需要,第一次使用 Go 来实战项目。

  需求:采用 golang 实现一个 webapi 的中转网关,将一些资源文件通过 http 协议上传至 FastDFS 分布式文件存储系统。

 

一、FastDFS 与 golang 对接的代码

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

  源代码可以 clone 下来看看,go 语法很简单

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

package main

import (
    "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 := 22122
    minConns := 10
    maxConns := 150
    connPool,_ := 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 string
        fmt.Scanln(&test)
        return
    }
    uploadResponse, err := fds.UploadByBuffer(ff, "jpg")

    if uploadResponse == nil {
        fmt.Println("upload error: %s", err)
        var test string
        fmt.Scanln(&test)
        return
    }
    fmt.Println("group name:", uploadResponse.GroupName)
    fmt.Println("remote file id:", uploadResponse.RemoteFileId)

    var test string
    fmt.Scanln(&test)
}

 

二、简单的 WebAPI 网关

  beego 框架 go 圈很有名气,国内大学著作,考虑到这次工程较小,暂未使用起来。

  go 实现一个 api 网关也是相当的简单:

package main

import (
    "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 不熟,仅供学习。

文件上传中转,如果是较大的文件,则采用将数据分片传输的方式进行。


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:loongsoft

查看原文:Go语言实现FastDFS分布式存储系统WebAPI网关

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2409 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传