使用的是VS2017

一、先使用 NuGet 获取这两个包。 执行以下步骤:

在“解决方案资源管理器”中,右键单击你的项目并选择“管理 NuGet 包”。

1.在线搜索“WindowsAzure.Storage”,然后单击“安装” 以安装存储客户端库和依赖项。

2.在线搜索“WindowsAzure.ConfigurationManager”,然后单击“安装”以安装 Azure Configuration Manager。

会生成5个dll,如下图:

.NET 使用 Azure Blob 存储图片或文件

封装代码如下:

需要先引用

using Microsoft.Azure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;

1).AzureBlob.cs

public class AzureBlob
{
    #region 私有变量
    //类的成员,用于创建Blob服务客户端
    CloudBlobClient blobClient;

    //容器和Blob其实就相当于文件夹、文件名

    /// <summary>
    /// 连接字符串
    /// </summary>
    private string storageConnectionString = CloudConfigurationManager.GetSetting("StorageConnectionString");
    #endregion

    #region 构造函数创建Blob服务客户端
    public AzureBlob()
    {
        //解析配置中的连接字符串
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);
        //创建Blob服务客户端
        blobClient = storageAccount.CreateCloudBlobClient();
    }
    #endregion

    #region 获取块Blob引用
    /// <summary>
    /// 获取块Blob引用
    /// </summary>
    /// <param name="mycontainer">容器名</param>
    /// <param name="fileName">文件名</param>
    /// <returns></returns>
    public CloudBlockBlob GetContainer(string mycontainer, string fileName)
    {
        //获取容器的引用
        CloudBlobContainer container = blobClient.GetContainerReference(mycontainer);
        //获取块 Blob 引用
        CloudBlockBlob blob = container.GetBlockBlobReference(fileName);
        return blob;
    }
    #endregion

    #region 二进制形式上传文件
    /// <summary>
    /// 二进制形式上传文件
    /// </summary>
    /// <param name="fileName">文件名</param>
    /// <param name="mycontainer">容器名</param>
    /// <param name="bytes">二进制形式的文件</param>
    /// <returns>异步信息</returns>
    public Task UploadToBlob(string fileName,string mycontainer,byte[] bytes)
    {
        //获取容器的引用
        CloudBlobContainer container = blobClient.GetContainerReference(mycontainer);
        //创建一个容器(如果该容器不存在)
        container.CreateIfNotExists();
        //设置该容器为公共容器,也就是说网络上能访问容器中的文件,但不能修改、删除
        container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });
        //将Blob(文件)上载到容器中,如果已存在同名Blob,则覆盖它
        CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);//获取块 Blob 引用
        Task result = blockBlob.UploadFromByteArrayAsync(bytes, 0, bytes.Length);//将二进制文件上传
        return result;
    }
    #endregion

    #region 文件路径上传
    /// <summary>
    /// 文件路径上传
    /// </summary>
    /// <param name="fileName">文件名</param>
    /// <param name="mycontainer">容器名</param>
    /// <param name="filePath">文件路径</param>
    /// <returns></returns>
    public string UploadToBlob(string fileName, string mycontainer,string filePath)
    {
        ////获取容器的引用
        CloudBlobContainer container = blobClient.GetContainerReference(mycontainer);
        //创建一个容器(如果该容器不存在)
        container.CreateIfNotExists();
        //设置该容器为公共容器,也就是说网络上能访问容器中的文件,但不能修改、删除
        container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });
        //将Blob(文件)上载到容器中,如果已存在同名Blob,则覆盖它
        CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);//获取块 Blob 引用
        //文件路径
        using (var fileStream = System.IO.File.OpenRead(filePath))
        {
            blockBlob.UploadFromStream(fileStream);
        }
        return blockBlob.Uri.ToString();
    }
    #endregion

    #region 根据文件名和容器名取到Blob地址
    /// <summary>
    /// 根据文件名和容器名取到Blob地址
    /// </summary>
    /// <param name="fileName">文件名</param>
    /// <param name="mycontainer">容器名</param>
    /// <returns></returns>
    public string GetBlobURI(string fileName, string mycontainer)
    {
        CloudBlockBlob blob = GetContainer(mycontainer, fileName);
        return blob.Uri.ToString();
    }
    #endregion

    #region 下载Blob
    /// <summary>
    /// 下载Blob
    /// </summary>
    /// <param name="fileName">文件名</param>
    /// <param name="mycontainer">容器名</param>
    /// <param name="fliePath">文件路径</param>
    public void DownloadToFile(string fileName, string mycontainer, string fliePath)
    {
        CloudBlockBlob blob = GetContainer(mycontainer, fileName);
        using (var fileStream = File.OpenWrite(fliePath))
        {
            blob.DownloadToStream(fileStream); //将blob保存在指定路径
        }
    }
    #endregion

    #region 下载Blob
    /// <summary>
    /// 下载Blob
    /// </summary>
    /// <param name="fileName">文件名</param>
    /// <param name="mycontainer">容器名</param>
    /// <param name="fliePath">文件路径</param>
    public string DownloadToStream(string fileName, string mycontainer)
    {
        CloudBlockBlob blob = GetContainer(mycontainer, fileName);
        string text;
        using (var memoryStream = new MemoryStream())
        {
            blob.DownloadToStream(memoryStream);
            text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
        }
        return text;
    }
    #endregion

    #region 下载Blob
    /// <summary>
    /// 下载Blob
    /// </summary>
    /// <param name="fileName">文件名</param>
    /// <param name="mycontainer">容器名</param>
    /// <param name="fliePath">文件路径</param>
    public void DownloadToFileStream(string fileName, string mycontainer, string fliePath)
    {
        CloudBlockBlob blob = GetContainer(mycontainer, fileName);
        using (var fileStream = new FileStream(fliePath, FileMode.OpenOrCreate))
        {
            blob.DownloadToStream(fileStream); //将blob保存在指定路径
        };
    }
    #endregion

    #region 删除Blob
    /// <summary>
    /// 删除Blob
    /// </summary>
    /// <param name="fileName">文件名</param>
    /// <param name="mycontainer">容器名</param>
    public void DeleteBlob(string fileName, string mycontainer)
    {
        CloudBlockBlob blob = GetContainer(mycontainer, fileName);
        blob.Delete();
    }
    #endregion
}
View Code

相关文章:

  • 2022-12-23
  • 2021-06-04
  • 2021-12-11
  • 2021-06-30
  • 2021-11-27
  • 2021-12-10
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-10-27
  • 2021-05-25
  • 2021-11-05
  • 2021-07-09
  • 2021-09-11
  • 2021-12-02
相关资源
相似解决方案