Golang仿云盘项目-2.2 保留文件元信息
本文来自博客园,作者:Jayvee,转载请注明原文链接:https://www.cnblogs.com/cenjw/p/16459817.html
目录结构
E:\goproj\FileStorageDisk
│ main.go
│ program.txt
│
├─handler
│ handler.go
│
├─meta
│ filemeta.go
│
├─static
│ └─view
│ index.html
│
└─util
util.go
文件元信息接口
文件元信息数据结构:meta\filemeta.go
点击查看代码
package meta
// FileMeta: 文件元信息结构
type FileMeta struct {
FileSha1 string // unique id
FileName string
FileSize int64
Location string
UploadAt string
}
// 存储每个上传文件的元信息,key是文件的FileSha1
var fileMetas map[string]FileMeta
// 初始化
func init() {
fileMetas = make(map[string]FileMeta)
}
// 接口1:更新或新增文件元信息
func UpdateFileMeta(fmeta FileMeta) {
fileMetas[fmeta.FileSha1] = fmeta
}
// 接口2:通过唯一标识获取文件的元信息对象
func GetFileMeta(fsha1 string) FileMeta {
return fileMetas[fsha1]
}
本文来自博客园,作者:Jayvee,转载请注明原文链接:https://www.cnblogs.com/cenjw/p/16459817.html
获取文件元信息的接口
更新handler\handler.go
点击查看代码
func UploadHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == "GET" {
...
} else if r.Method == "POST" {
...
defer file.Close()
fileMeta := meta.FileMeta{
FileName: head.Filename,
Location: "/tmp/" + head.Filename,
UploadAt: time.Now().Format("2006-01-02 15:04:05"),
}
// newfile, err := os.Create("/tmp/" + head.Filename)
newfile, err := os.Create(fileMeta.Location)
...
fileMeta.FileSize, err = io.Copy(newfile, file)
if err != nil {
fmt.Printf("Failed to save the data to file, err:%s\n", err.Error())
return
}
newfile.Seek(0, 0) // 把文件句柄的位置移到开始位置
fileMeta.FileSha1 = util.FileSha1(newfile) // 计算文件sha1值
meta.UpdateFileMeta(fileMeta) // 更新文件元信息
http.Redirect(w, r, "/file/upload/ok", http.StatusFound)
}
}
// 获取文件元信息的接口
func GetFileMetaHandler(w http.ResponseWriter, r *http.Request) {
// 需要解析客户端发送请求的参数
r.ParseForm()
filehash := r.Form["filehash"][0] // filehash要与前端对应
// 获取文件元信息对象
fMeta := meta.GetFileMeta(filehash)
// 转成jsonString格式返回客户端
data, err := json.Marshal(fMeta)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
}
w.Write(data)
}
> 本文来自博客园,作者:Jayvee,转载请注明原文链接:https://www.cnblogs.com/cenjw/p/16459817.html
最后,记得到main.go注册handler function
http.HandleFunc("/file/meta", handler.GetFileMetaHandler)
util\util.go 是一个工具包,提供计算文件元信息的函数。
上传示例
- 任意上传一张图片

- 计算这张图片的sha1值

- 文件上传成功后,访问获取文件元信息的接口
http://localhost:8080/file/meta?filehash=该文件的sha1值

Golang仿云盘项目-2.2 保留文件元信息的更多相关文章
- 项目附 - 云盘项目-分析echo.c
分析FastCGI源码目录下example中echo.c代码: /* * echo.c -- * * Produce a page containing all FastCGI inputs * * ...
- PC 端 360 云盘初体验
首先吐槽一下安装软件,文件名是 360wangpan,安装好后软件名称是"360云盘",好歹得统一下嘛,不然还以为下错了安装文件呢. 一般使用和其他网盘差不多,速度也还行,但还是没 ...
- (原创)高仿360云盘android端的UI实现
前些日子几大互联网巨头展开了一轮网盘空间大战.一下子从G级别提高到了T级别.以后谁的空间没有1T估计都不好意思开口了~~~ 试用了一下360云盘的客户端,比较小清新(不是给360打广告~~~).刚好U ...
- CentOS 7 yum 安装ownCloud 搭建云盘服务器
基于CentOS7.0 64位系统+ownCloud 10.0 稳定版本构建 ownCloud 是一个开源免费专业的私有云存储项目,它能帮你快速在个人电脑或服务器上架设一套专属的私有云文件同步网盘,可 ...
- 哭瞎!360云盘将关停,你的几十T照片和文件该怎么办
IDO老徐刚得到了一个非常不开心的消息,360云盘将停止个人云盘服务...进行业务转型,在网盘存储.传播内容的合法性和安全性得到彻底解决之前不再考虑恢复,之后转型企业云服务. 而且之前共享的所有资料, ...
- 360云盘、百度云、微云……为什么不出 OS X(Mac 端)应用呢?(用户少,开发成本高)(百度网盘Mac版2016.10.18横空出世)
已经说的很好了,现有的云盘所谓的 OS X 版只有云同步功能,不过 115 是个例外,不过 115 的现状……不言自明.接下来说点和本题答案无关的,其实在官方客户端流氓 + 限速的大背景下 OS X ...
- 使用Hadoop打造私有云盘之API操作
项目介绍:使用hadoop实现云盘的增删读获取列表功能,hadoop不支持数据修改,特性是一次写入多次读取.主流的网盘也不支持该功能.今天我们用hdfs的FileSystem实现这些操作. 1.上传功 ...
- 挑战以Dropbox为代表的传统“同步网盘”,Seafile推出“分布式文件同步技术”打造的私有云服务
挑战以Dropbox为代表的传统“同步网盘”,Seafile推出“分布式文件同步技术”打造的私有云服务#36氪开放日# 其他 JasonZheng • 2012-04-07 15:14 来自36氪开放 ...
- 基于Hadoop2.2.0版本号分布式云盘的设计与实现
基于Hadoop2.2.0版本号分布式云盘的设计与实现 一.前言 在学习了hadoop2.2一个月以来,我重点是在学习hadoop2.2的HDFS.即是hadoop的分布式系统,看了非常久的源代码看的 ...
随机推荐
- Day 006:PAT练习--1005 Spell It Right (20 分)
上星期一直在写报告乱七八糟的,从今天开始不刷乙级的了,还是多刷甲级进步来得快一点! 显而易见,该题的关键在于将输入之和的每一位从高到低输出,这里我们发现题意中的输入数的范围为0-10^100,显然我们 ...
- go-micro开发RPC服务的方法及其运行原理
go-micro是一个知名的golang微服务框架,最新版本是v4,这篇文章将介绍go-micro v4开发RPC服务的方法及其运作原理. 基本概念 go-micro有几个重要的概念,后边开发RPC服 ...
- 在MAUI中使用Masa Blazor
Masa Blazor是什么 在此之前我们已经介绍过什么是Masa Blazor,以及如何使用Masa Balzor,如果还有不了解Masa Blazor的同学可以看我上篇文章[初识Masa Blaz ...
- [AcWing 788] 逆序对的数量
点击查看代码 #include<iostream> using namespace std; typedef long long ll; const int N = 1e5 + 10; i ...
- 使用 .net + blazor 做一个 kubernetes 开源文件系统
背景 据我所知,目前 kubernetes 本身或者其它第三方社区都没提供 kubernetes 的文件系统.也就是说要从 kubernetes 的容器中下载或上传文件,需要先进入容器查看目录结构,然 ...
- HandlerMethodArgumentResolver 自定义使用
HandlerMethodArgumentResolver 自定义使用 1.HandlerMethodArgumentResolver 的应用场景 HandlerMethodArgumentRes ...
- 对象、Map、Set、WeakMap、WeakSet
对象.Map.Set.WeakMap.WeakSet 本文写于 2020 年 11 月 24 日 总的来说,Set 和 Map 主要的应用场景分别在于数据重组和数据储存.Set 是一种叫做「集合」的数 ...
- flask配置文件、路由设置、模板语法、请求与响应、session使用、闪现功能(flash)
今日内容概要 flask 配置文件 flask 路由系统 flask模板语法 请求与相应 session 闪现(flash翻译过来的) 内容详细 1.flask 配置文件 # django ---&g ...
- 一文带你读懂 Hbase 的架构组成
hi,大家好,我是大D.今天咱们继续深挖一下 HBase 的架构组成. Hbase 作为 NoSQL 数据库的代表,属于三驾马车之一 BigTable 的对应实现,HBase 的出现很好地弥补了大数据 ...
- 让 API 测试变的简单。
做开发已经四年有余了,之前在接口测试的时候最开始用的自己写的测试类进行测试,后来接触到了 postman 和 swagger ,虽然用起来比自己写的强太多了,但是总觉得差点事儿. 一方面是 postm ...