github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/internal/build/azure.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  //版权所有2016 Go Ethereum作者
    10  //此文件是Go以太坊库的一部分。
    11  //
    12  //Go-Ethereum库是免费软件:您可以重新分发它和/或修改
    13  //根据GNU发布的较低通用公共许可证的条款
    14  //自由软件基金会,或者许可证的第3版,或者
    15  //(由您选择)任何更高版本。
    16  //
    17  //Go以太坊图书馆的发行目的是希望它会有用,
    18  //但没有任何保证;甚至没有
    19  //适销性或特定用途的适用性。见
    20  //GNU较低的通用公共许可证,了解更多详细信息。
    21  //
    22  //你应该收到一份GNU较低级别的公共许可证副本
    23  //以及Go以太坊图书馆。如果没有,请参见<http://www.gnu.org/licenses/>。
    24  
    25  package build
    26  
    27  import (
    28  	"context"
    29  	"fmt"
    30  	"net/url"
    31  	"os"
    32  
    33  	"github.com/Azure/azure-storage-blob-go/2018-03-28/azblob"
    34  )
    35  
    36  //azureBlobstoreConfig是一个身份验证和配置结构,其中包含
    37  //Azure SDK与中的speicifc容器交互所需的数据
    38  //博客商店。
    39  type AzureBlobstoreConfig struct {
    40  Account   string //帐户名称以授权API请求
    41  Token     string //上述帐户的访问令牌
    42  Container string //要将文件上载到的Blob容器
    43  }
    44  
    45  //AzureBlobstoreUpload uploads a local file to the Azure Blob Storage. 注意,这个
    46  //方法假定最大文件大小为64MB(Azure限制)。较大的文件将
    47  //需要实现多API调用方法。
    48  //
    49  //请参阅:https://msdn.microsoft.com/en-us/library/azure/dd179451.aspx anchor_3
    50  func AzureBlobstoreUpload(path string, name string, config AzureBlobstoreConfig) error {
    51  	if *DryRunFlag {
    52  		fmt.Printf("would upload %q to %s/%s/%s\n", path, config.Account, config.Container, name)
    53  		return nil
    54  	}
    55  //针对Azure云创建经过身份验证的客户端
    56  	credential := azblob.NewSharedKeyCredential(config.Account, config.Token)
    57  	pipeline := azblob.NewPipeline(credential, azblob.PipelineOptions{})
    58  
    59  u, _ := url.Parse(fmt.Sprintf("https://%s.blob.core.windows.net“,配置帐户)
    60  	service := azblob.NewServiceURL(*u, pipeline)
    61  
    62  	container := service.NewContainerURL(config.Container)
    63  	blockblob := container.NewBlockBlobURL(name)
    64  
    65  //将要上载的文件传输到指定的blobstore容器中
    66  	in, err := os.Open(path)
    67  	if err != nil {
    68  		return err
    69  	}
    70  	defer in.Close()
    71  
    72  	_, err = blockblob.Upload(context.Background(), in, azblob.BlobHTTPHeaders{}, azblob.Metadata{}, azblob.BlobAccessConditions{})
    73  	return err
    74  }
    75  
    76  //azureBlobstoreList列出了一个Azure Blobstore中包含的所有文件。
    77  func AzureBlobstoreList(config AzureBlobstoreConfig) ([]azblob.BlobItem, error) {
    78  	credential := azblob.NewSharedKeyCredential(config.Account, config.Token)
    79  	pipeline := azblob.NewPipeline(credential, azblob.PipelineOptions{})
    80  
    81  u, _ := url.Parse(fmt.Sprintf("https://%s.blob.core.windows.net“,配置帐户)
    82  	service := azblob.NewServiceURL(*u, pipeline)
    83  
    84  //列出容器中的所有blob并将其返回
    85  	container := service.NewContainerURL(config.Container)
    86  
    87  	res, err := container.ListBlobsFlatSegment(context.Background(), azblob.Marker{}, azblob.ListBlobsSegmentOptions{
    88  MaxResults: 1024 * 1024 * 1024, //是的,把它们都拿出来
    89  	})
    90  	if err != nil {
    91  		return nil, err
    92  	}
    93  	return res.Segment.BlobItems, nil
    94  }
    95  
    96  //azureblobstorelete迭代要删除的文件列表并删除它们
    97  //从墓碑上。
    98  func AzureBlobstoreDelete(config AzureBlobstoreConfig, blobs []azblob.BlobItem) error {
    99  	if *DryRunFlag {
   100  		for _, blob := range blobs {
   101  			fmt.Printf("would delete %s (%s) from %s/%s\n", blob.Name, blob.Properties.LastModified, config.Account, config.Container)
   102  		}
   103  		return nil
   104  	}
   105  //针对Azure云创建经过身份验证的客户端
   106  	credential := azblob.NewSharedKeyCredential(config.Account, config.Token)
   107  	pipeline := azblob.NewPipeline(credential, azblob.PipelineOptions{})
   108  
   109  u, _ := url.Parse(fmt.Sprintf("https://%s.blob.core.windows.net“,配置帐户)
   110  	service := azblob.NewServiceURL(*u, pipeline)
   111  
   112  	container := service.NewContainerURL(config.Container)
   113  
   114  //迭代这些blob并删除它们
   115  	for _, blob := range blobs {
   116  		blockblob := container.NewBlockBlobURL(blob.Name)
   117  		if _, err := blockblob.Delete(context.Background(), azblob.DeleteSnapshotsOptionInclude, azblob.BlobAccessConditions{}); err != nil {
   118  			return err
   119  		}
   120  	}
   121  	return nil
   122  }