| 32 | ) |
| 33 | |
| 34 | func (m *mongoStorage) ReceiveBlob(ctx context.Context, ref blob.Ref, source io.Reader) (blob.SizedRef, error) { |
| 35 | blobData, err := io.ReadAll(source) |
| 36 | if err != nil { |
| 37 | return blob.SizedRef{}, err |
| 38 | } |
| 39 | |
| 40 | b := blobDoc{Key: ref.String(), Blob: blobData, Size: uint32(len(blobData))} |
| 41 | |
| 42 | if err = m.c.Insert(b); err != nil { |
| 43 | // Unique key violation? |
| 44 | // Then the blob already exists, no need to throw an error |
| 45 | if mongoErr, isMongoErr := err.(*mgo.LastError); isMongoErr && mongoErr.Code == mgoUniqueKeyErr { |
| 46 | return blob.SizedRef{Ref: ref, Size: b.Size}, nil |
| 47 | } |
| 48 | return blob.SizedRef{}, err |
| 49 | } |
| 50 | return blob.SizedRef{Ref: ref, Size: b.Size}, nil |
| 51 | } |