dppb79372 2019-09-09 09:06
浏览 72

是否可以计算文件的md5并将文件同时写入磁盘?

I write a file uploader with Go. I would like to have md5 of the file as a file name when I save it to the disk.

What is the best way to solve this problem?

I save a file this way:

reader, _ := r.MultipartReader()
p, _ := reader.NextPart()

f, _ := os.Create("./filename") // here I need md5 as a file name
defer f.Close()

lmt := io.LimitReader(p, maxSize + 1)
written, _ := io.Copy(f, lmt)
if written > maxSize {
    os.Remove(f.Name())
}
  • 写回答

2条回答 默认 最新

  • dqifn68206 2019-09-09 09:18
    关注

    here is an example using io.TeeReader to perform both computation and copy at same time

    https://play.golang.org/p/IJJQiaeTOBh

    package main
    
    import (
        "crypto/sha256"
        "fmt"
        "io"
        "os"
        "strings"
    )
    
    func main() {
    
        var s io.Reader = strings.NewReader("some data")
    
        // maxSize := 4096
        // s = io.LimitReader(s, maxSize + 1)
    
        h := sha256.New()
        tr := io.TeeReader(s, h)
        io.Copy(os.Stdout, tr)
        fmt.Printf("
    %x", h.Sum(nil))
    
    }
    // Output:
    //some data
    //1307990e6ba5ca145eb35e99182a9bec46531bc54ddf656a602c780fa0240dee
    

    And the comparison test for correctness

    $ echo -n "some data" | sha256sum -
    1307990e6ba5ca145eb35e99182a9bec46531bc54ddf656a602c780fa0240dee  -
    
    评论

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么