github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/swarm/api/storage.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 // 10 // 11 // 12 // 13 // 14 // 15 // 16 // 17 // 18 // 19 // 20 // 21 // 22 // 23 // 24 25 package api 26 27 import ( 28 "context" 29 "path" 30 31 "github.com/ethereum/go-ethereum/swarm/storage" 32 ) 33 34 type Response struct { 35 MimeType string 36 Status int 37 Size int64 38 // 39 Content string 40 } 41 42 // 43 // 44 // 45 type Storage struct { 46 api *API 47 } 48 49 func NewStorage(api *API) *Storage { 50 return &Storage{api} 51 } 52 53 // 54 // 55 // 56 // 57 func (s *Storage) Put(ctx context.Context, content string, contentType string, toEncrypt bool) (storage.Address, func(context.Context) error, error) { 58 return s.api.Put(ctx, content, contentType, toEncrypt) 59 } 60 61 // 62 // 63 // 64 // 65 // 66 // 67 // 68 // 69 func (s *Storage) Get(ctx context.Context, bzzpath string) (*Response, error) { 70 uri, err := Parse(path.Join("bzz:/", bzzpath)) 71 if err != nil { 72 return nil, err 73 } 74 addr, err := s.api.Resolve(ctx, uri.Addr) 75 if err != nil { 76 return nil, err 77 } 78 reader, mimeType, status, _, err := s.api.Get(ctx, nil, addr, uri.Path) 79 if err != nil { 80 return nil, err 81 } 82 quitC := make(chan bool) 83 expsize, err := reader.Size(ctx, quitC) 84 if err != nil { 85 return nil, err 86 } 87 body := make([]byte, expsize) 88 size, err := reader.Read(body) 89 if int64(size) == expsize { 90 err = nil 91 } 92 return &Response{mimeType, status, expsize, string(body[:size])}, err 93 } 94 95 // 96 // 97 // 98 // 99 func (s *Storage) Modify(ctx context.Context, rootHash, path, contentHash, contentType string) (newRootHash string, err error) { 100 uri, err := Parse("bzz:/" + rootHash) 101 if err != nil { 102 return "", err 103 } 104 addr, err := s.api.Resolve(ctx, uri.Addr) 105 if err != nil { 106 return "", err 107 } 108 addr, err = s.api.Modify(ctx, addr, path, contentHash, contentType) 109 if err != nil { 110 return "", err 111 } 112 return addr.Hex(), nil 113 }