github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/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 19:16:43</date> 10 //</624450112373919744> 11 12 13 package api 14 15 import ( 16 "context" 17 "path" 18 19 "github.com/ethereum/go-ethereum/swarm/storage" 20 ) 21 22 type Response struct { 23 MimeType string 24 Status int 25 Size int64 26 //内容[]字节 27 Content string 28 } 29 30 //实现服务 31 // 32 //已弃用:请改用HTTP API 33 type Storage struct { 34 api *API 35 } 36 37 func NewStorage(api *API) *Storage { 38 return &Storage{api} 39 } 40 41 //将内容上传到群中,并提供一个简单的清单 42 //其内容类型 43 // 44 //已弃用:请改用HTTP API 45 func (s *Storage) Put(ctx context.Context, content string, contentType string, toEncrypt bool) (storage.Address, func(context.Context) error, error) { 46 return s.api.Put(ctx, content, contentType, toEncrypt) 47 } 48 49 //get从bzzpath检索内容并完全读取响应 50 //它返回响应对象,该对象将包含 51 //响应正文作为内容字段的值 52 //注:如果错误为非零,则响应可能仍有部分内容 53 //实际大小以len(resp.content)表示,而预期大小 54 //尺寸为相应尺寸 55 // 56 //已弃用:请改用HTTP API 57 func (s *Storage) Get(ctx context.Context, bzzpath string) (*Response, error) { 58 uri, err := Parse(path.Join("bzz:/", bzzpath)) 59 if err != nil { 60 return nil, err 61 } 62 addr, err := s.api.Resolve(ctx, uri.Addr) 63 if err != nil { 64 return nil, err 65 } 66 reader, mimeType, status, _, err := s.api.Get(ctx, nil, addr, uri.Path) 67 if err != nil { 68 return nil, err 69 } 70 quitC := make(chan bool) 71 expsize, err := reader.Size(ctx, quitC) 72 if err != nil { 73 return nil, err 74 } 75 body := make([]byte, expsize) 76 size, err := reader.Read(body) 77 if int64(size) == expsize { 78 err = nil 79 } 80 return &Response{mimeType, status, expsize, string(body[:size])}, err 81 } 82