1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16
17 package azure
18
19 import (
20 "bytes"
21 "context"
22 "crypto/md5"
23 "io"
24
25 "perkeep.org/pkg/blob"
26 "perkeep.org/pkg/blobserver"
27 )
28
29 func (sto *azureStorage) ReceiveBlob(ctx context.Context, b blob.Ref, source io.Reader) (sr blob.SizedRef, err error) {
30 var buf bytes.Buffer
31 md5h := md5.New()
32
33 size, err := io.Copy(io.MultiWriter(&buf, md5h), source)
34 if err != nil {
35 return sr, err
36 }
37
38 err = sto.azureClient.PutObject(ctx, b.String(), sto.container, md5h, size, &buf)
39 if err != nil {
40 return sr, err
41 }
42 if sto.cache != nil {
43
44
45 blobserver.ReceiveNoHash(ctx, sto.cache, b, bytes.NewReader(buf.Bytes()))
46 }
47 return blob.SizedRef{Ref: b, Size: uint32(size)}, nil
48 }