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

最新文章

  1. echarts学习总结
  2. C语言的基础
  3. 前端学习 第四弹: HTML(一)
  4. 《疯狂Java讲义》(二)---- Java程序的运行机制和JVM
  5. DataGridView控件内建立日期选择编辑列
  6. centos安装lamp环境
  7. JAVA一些常用的时间操作
  8. What is Proguard?
  9. WPF中让TextBlock每一个字符显示不同的颜色
  10. 获取IMEI码
  11. (转)教你如何使用php session
  12. 安装php时,make步骤报错make: *** [sapi/fpm/php-fpm] Error 1
  13. 简单的CSS 下拉导航菜单实现代码
  14. Sicily-1024
  15. ios 类似的效果淘宝商品详细页面
  16. kafka知识体系-kafka设计和原理分析-kafka leader选举
  17. Python两个栈实现一个队列
  18. 【转】理解WebKit和Chromium: JavaScript引擎简介
  19. 检索关键字 nyoj
  20. JavaScript 中的陷阱

热门文章

  1. WAMP Apache 2.5 配置虚拟主机
  2. Oracle 合并 merger into
  3. java 和 JVM
  4. Python爬虫音频数据
  5. canvas画画板,canvas画五角星,canvas制作钟表、Konva写钟表
  6. 查看linux 下进程运行时间(转)
  7. ajax之深入解析(2)
  8. JS怎么刷新当前页面
  9. Linux安装mysql.8.0.12
  10. Nginx配置问题总结