云存储实现之简单的文件存储

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使用详解

云原生之存储实战部署Ceph分布式存储集群

云原生时代的分布式文件系统是啥样的?

云计算:为什么说存储是云计算发展瓶颈之一?虚拟化是解决之道!

小白使用阿里云的oss实现文件云存储

云原生之kuberneteskubernetes集群下Secret存储对象的管理