1.gin文件上传
- 1.文件上传 接收文件
//为 multipart forms 设置较低的内存限制 (默认是 32 MiB)
router.MaxMultipartMemory = 8 << 20 // 8 MiB
router.POST("/upload", func(c *gin.Context) {
// 单文件
file, _ := c.FormFile("file")
log.Println(file.Filename)
// 上传文件至指定目录
c.SaveUploadedFile(file, dst)
2.gin框架获取参数
注意、
1.结构体一定要前后对应,既字段名与`from:“对应”
2.os操作文件一定要及时关闭,不然会造成文件进程被占用
GET
id := c.Query("id") //查询请求URL后面拼接的参数
name := c.PostForm("name") //从表单中查询参数
uuid := c.Param("uuid") //取得URL中参数
s, _ := c.Get("current_manager") //从用户上下文读取值
page := c.DefaultQuery("page", "0") //查询请求URL后面的参数,如果没有填写默认值
POST
message := c.PostForm("message")
//从表单中查询参数,,如果没有就获取默认值
nick := c.DefaultPostForm("nick", "anonymous")
获取body的值
bodyBytes, _ := ioutil.ReadAll(c.Request.Body)
获取路径中的参数
此规则能够匹配/user/john这种格式,但不能匹配/user/ 或 /user这种格式
name := c.Param("name")
// 但是,这个规则既能匹配/user/john/格式也能匹配/user/john/send这种格式
// 如果没有其他路由器匹配/user/john,它将重定向到/user/john/
name := c.Param
//绑定到结构体
var u User
//从http.Request中读取值到User结构体中,手动确定绑定类型binding.Form
err1 := c.BindWith(&u, binding.Form)
3.gin框架返回文件信息流
//设置请求头
c.Header("Content-Type","image/png")
c.Header("Content-Disposition","attachment;filename=\""+fMeta.FileName+"\"")
//返回信息流
c.File(fMeta.Location)
//判断文件是否存在 存在返回 true 不存在返回false
func checkFileIsExist(filename string) bool {
var exist = true
if _, err := os.Stat(filename); os.IsNotExist(err) {
exist = false
}
return exist
}
4.中间间的书写
func Middleware() gin.HandlerFunc {
return func(c *gin.Context) {
fmt.Println("先执行我哦")
c.Next()//执行路由函数
fmt.Println("I am after next")最后才执行我
}
}
- 注意:在中间件中不能用return终止请求,应当用c.Abort()
- return在中间件中应当用c.Abort()后,退出中间件,而c.Abort()之后会执行中间件后面的内容。
5.CEPH集群搭建与部署
- 参考官方文档进行具体的学习
- 1.docker安装ceph集群
- 2.go获取连接ceph
- 3.对ceph进行操作存储