- commit
- 40ff4a4
- parent
- f987b11
- author
- Eric Bower
- date
- 2025-06-19 11:32:47 -0400 EDT
feat(pgs): fs adapter generate etag on-the-fly
1 files changed,
+17,
-0
+17,
-0
1@@ -1,6 +1,8 @@
2 package storage
3
4 import (
5+ "crypto/md5"
6+ "encoding/hex"
7 "fmt"
8 "io"
9 "io/fs"
10@@ -14,6 +16,7 @@ import (
11
12 "github.com/picosh/pico/pkg/send/utils"
13 "github.com/picosh/pico/pkg/shared/mime"
14+ putils "github.com/picosh/utils"
15 )
16
17 // https://stackoverflow.com/a/32482941
18@@ -113,6 +116,20 @@ func (s *StorageFS) GetObject(bucket Bucket, fpath string) (utils.ReadAndReaderA
19 return nil, objInfo, err
20 }
21
22+ etag := ""
23+ // only generate etag if file is less than 10MB
24+ if info.Size() <= int64(10*putils.MB) {
25+ // calculate etag
26+ h := md5.New()
27+ tr := io.TeeReader(dat, h)
28+ if _, err := io.Copy(h, tr); err != nil {
29+ return nil, nil, err
30+ }
31+ md5Sum := h.Sum(nil)
32+ etag = hex.EncodeToString(md5Sum)
33+ }
34+
35+ objInfo.ETag = etag
36 objInfo.Size = info.Size()
37 objInfo.LastModified = info.ModTime()
38 objInfo.Metadata.Set("content-type", mime.GetMimeType(fpath))