云存储实现之简单的文件存储
Posted 旧时星空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云存储实现之简单的文件存储相关的知识,希望对你有一定的参考价值。
云存储实现之简单的文件存储
1.获取上传页面
2.选取本地文件,form形式上传文件
3.云端接收文件流,写入本地存储
4.云端更新文件元信息集合
文件元信息查询接口实现
//获取文件元信息集合
func GetMetaHandler(w http.ResponseWriter,r *http.Request)
r.ParseForm()//解析客户端的操作
filehash:=r.Form["filehash"][0] //由请求解析得到filehash的数组第一个string
fMeta:=meta.GetFileMeta(filehash)//返回传入string对应的结构体
data,err:=json.Marshal(fMeta)//转换为jso数据
if err!=nil
w.WriteHeader(http.StatusInternalServerError)
return
w.Write(data)
文件下载接口
//文件下载
func DownLoadHandler(w http.ResponseWriter,r *http.Request)
r.ParseForm()
fshal:=r.Form.Get("filehash")
fm:=meta.GetFileMeta(fshal)//返回对象即结构体信息
f,err:=os.Open(fm.Location)//结构体中的Location是服务的存储文件的指定的位置
//将文件从服务端读到内存再返回给客户端
if err!=nil
w.WriteHeader(http.StatusInternalServerError)
return
defer f.Close()
data,err:=ioutil.ReadAll(f)//读取到内存中,小文件
if err!=nil
w.WriteHeader(http.StatusInternalServerError)
return
w.Header().Set("Content-Type","application/octect-stream")
w.Header().Set("Content-disposition","attachment;filename=\\""+fm.FileName+"\\"")
w.Write(data)
修改文件元信息名
//修改文件元信息名
func FileMetaUpdateHandler(w http.ResponseWriter,r *http.Request)
r.ParseForm()//解析请求参数
opType:=r.Form.Get("op")
fileShal:=r.Form.Get("filehash")
newFileName:=r.Form.Get("filename")
if opType!="0"
w.WriteHeader(http.StatusForbidden)
return
if r.Method!="POST"
w.WriteHeader(http.StatusMethodNotAllowed)
return
curFileMeta:=meta.GetFileMeta(fileShal)
curFileMeta.FileName=newFileName
meta.UpdateFileMeta(curFileMeta)
//修改返回给客户端
data,err:=json.Marshal(curFileMeta)
if err!=nil
w.WriteHeader(http.StatusInternalServerError)
return
w.WriteHeader(http.StatusOK)
w.Write(data)
文件删除
//删除
func FileDeleteHandler(w http.ResponseWriter,r *http.Request)
r.ParseForm()
fileShal:=r.Form.Get("filehash")
fMeta:=meta.GetFileMeta(fileShal)//删除本地文件
os.Remove(fMeta.Location)
meta.RemoveFileMeta(fileShal)//删除在客户端的索引
w.WriteHeader(http.StatusOK)
以上是关于云存储实现之简单的文件存储的主要内容,如果未能解决你的问题,请参考以下文章
云原生kubernetesk8s数据存储之Volume使用详解