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

该博客介绍了云存储的基本实现,包括通过表单上传文件到云端,存储文件流并更新文件元信息。同时,提供了查询文件元信息、文件下载及修改文件名的接口。此外,还详细阐述了文件删除操作,涉及文件在服务器的删除及客户端元信息索引的移除。
摘要由CSDN通过智能技术生成

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

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)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值