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