首页 / 更多教程 / 一个 go 文件服务器 ssdb
一个 go 文件服务器 ssdb
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了一个 go 文件服务器 ssdb,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2140字,纯文字阅读大概需要4分钟。
内容图文
![一个 go 文件服务器 ssdb](/upload/InfoBanner/zyjiaocheng/454/f9905e58c8b54b5c86e01da59db04b98.jpg)
file system ssdb
go http listen
文件存储到 ssdb
gfs
|
twemproxy
|
ssdb(master) ssdb(slave)
ssdb 连接协议为 redis 协议
生成MD5 KEY
handle.go 代码
package main import ( "fmt" "io/ioutil" "net/http" "path" ) func (ctx *Context) server(w http.ResponseWriter, r *http.Request) { //params := r.URL.Query() //key := params.Get("k") //callback := params.Get("cb") path := r.URL.Path if path == "/" { home(w, r) } else { md5key := path[1:len(path)] fmt.Println("md5key:" + md5key) ctx.store.Get("key") val, err := ctx.store.Get(md5key) if err != nil { fmt.Fprint(w, "the file not exits!") } fmt.Fprint(w, val) ctx.download(w, r, md5key) } } func home(w http.ResponseWriter, r *http.Request) { if r.Method != "GET" { http.Error(w, "Method Not Allowed", 405) return } html := `<!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> </head> <body> <form action="/upload" method="POST" enctype="multipart/form-data"> <label for="field1">file:</label> <input name="file" type="file" /> <input type="submit"></input> </form> </body> </html>` fmt.Fprint(w, html) } func (ctx *Context) upload(w http.ResponseWriter, r *http.Request) { // if err := r.ParseMultipartForm(CACHE_MAX_SIZE); err != nil { // //ctx.context.Logger.Error(err.Error()) // //ctx.doError(err, http.StatusForbidden) // return // } file, handle, err := r.FormFile("file") if err != nil { //ctx.doError(err, 500) fmt.Println(err) return } defer file.Close() //fmt.Println("upload file:%s", handle.Filename) //fmt.Println("ext" + path.Ext(handle.Filename)) ext := path.Ext(handle.Filename) data, err := ioutil.ReadAll(file) if err != nil { //ctx.doError(err, 500) fmt.Println(err) return } md5key := fmt.Sprintf("%s%s", gen_md5_str(data), ext) ctx.store.Set(md5key, data) if err != nil { //fmt.Println("upload file fail:" md5key) fmt.Println(err) return } w.Write([]byte(fmt.Sprintf("%s", md5key))) } func (ctx *Context) download(w http.ResponseWriter, r *http.Request, key string) { val, err := ctx.store.Get(key) if err != nil { fmt.Fprint(w, "the file not exits!") } fmt.Fprint(w, val) }
代码托管到 github
https://github.com/dtxlink/gfs
一个 go 文件服务器 ssdb
标签:
本文系统来源:http://www.cnblogs.com/linsongbin/p/4683410.html
内容总结
以上是互联网集市为您收集整理的一个 go 文件服务器 ssdb全部内容,希望文章能够帮你解决一个 go 文件服务器 ssdb所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。