github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/swarm/api/storage.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 12:09:47</date> 10 //</624342670101188608> 11 12 // 13 // 14 // 15 // 16 // 17 // 18 // 19 // 20 // 21 // 22 // 23 // 24 // 25 // 26 // 27 28 package api 29 30 import ( 31 "context" 32 "path" 33 34 "github.com/ethereum/go-ethereum/swarm/storage" 35 ) 36 37 type Response struct { 38 MimeType string 39 Status int 40 Size int64 41 // 42 Content string 43 } 44 45 // 46 // 47 // 48 type Storage struct { 49 api *API 50 } 51 52 func NewStorage(api *API) *Storage { 53 return &Storage{api} 54 } 55 56 // 57 // 58 // 59 // 60 func (s *Storage) Put(ctx context.Context, content string, contentType string, toEncrypt bool) (storage.Address, func(context.Context) error, error) { 61 return s.api.Put(ctx, content, contentType, toEncrypt) 62 } 63 64 // 65 // 66 // 67 // 68 // 69 // 70 // 71 // 72 func (s *Storage) Get(ctx context.Context, bzzpath string) (*Response, error) { 73 uri, err := Parse(path.Join("bzz:/", bzzpath)) 74 if err != nil { 75 return nil, err 76 } 77 addr, err := s.api.Resolve(ctx, uri.Addr) 78 if err != nil { 79 return nil, err 80 } 81 reader, mimeType, status, _, err := s.api.Get(ctx, nil, addr, uri.Path) 82 if err != nil { 83 return nil, err 84 } 85 quitC := make(chan bool) 86 expsize, err := reader.Size(ctx, quitC) 87 if err != nil { 88 return nil, err 89 } 90 body := make([]byte, expsize) 91 size, err := reader.Read(body) 92 if int64(size) == expsize { 93 err = nil 94 } 95 return &Response{mimeType, status, expsize, string(body[:size])}, err 96 } 97 98 // 99 // 100 // 101 // 102 func (s *Storage) Modify(ctx context.Context, rootHash, path, contentHash, contentType string) (newRootHash string, err error) { 103 uri, err := Parse("bzz:/" + rootHash) 104 if err != nil { 105 return "", err 106 } 107 addr, err := s.api.Resolve(ctx, uri.Addr) 108 if err != nil { 109 return "", err 110 } 111 addr, err = s.api.Modify(ctx, addr, path, contentHash, contentType) 112 if err != nil { 113 return "", err 114 } 115 return addr.Hex(), nil 116 } 117