golang web 开发技巧

读取文件并计算MD5

file, info, err := ctx.FormFile("file")
if err != nil {
   	...
}
defer file.Close()
// 判断请求头
contentType := info.Header.Get("Content-Type")
if contentType == "" {
    handlers.BadRequest("没有Content-Type")
}
fileHandler, err := info.Open()
if err != nil {
    ...
}
// 判断是否是图片
imageFile, imageType, err := image.DecodeConfig(fileHandler)
if err != nil {
    ...
}
md5Handle := md5.New()             //创建 md5 句柄
_, err := io.Copy(md5Handle, file) //将文件内容拷贝到 md5 句柄中
if err != nil {
    ...
}
md5Byte := md5Handle.Sum(nil) //计算 MD5 值,返回 []byte
md5 := hex.EncodeToString(md5Byte)

// io.Copy 后需要重置文件指针
if _, err = file.Seek(0, io.SeekStart); err != nil {
    ...
}
// 处理文件

获取当前文件绝对路径

// 最终方案-全兼容
func GetCurrentAbPath() string {
    dir := getCurrentAbPathByExecutable()
    if strings.Contains(dir, getTmpDir()) {
        return getCurrentAbPathByCaller()
    }
    return dir
}

// 获取系统临时目录,兼容go run
func getTmpDir() string {
    dir := os.Getenv("TEMP")
    if dir == "" {
        dir = os.Getenv("TMP")
    }
    res, _ := filepath.EvalSymlinks(dir)
    return res
}

// 获取当前执行文件绝对路径
func getCurrentAbPathByExecutable() string {
    exePath, err := os.Executable()
    if err != nil {
        log.Fatalln(err)
    }
    res, _ := filepath.EvalSymlinks(filepath.Dir(exePath))
    return res
}

// 获取当前执行文件绝对路径(go run)
func getCurrentAbPathByCaller() string {
    var abPath string
    _, filename, _, ok := runtime.Caller(0)
    if ok {
        abPath = path.Dir(filename)
    }
    return abPath
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值