七牛云文件批量上传加单个上传和下载

第一步:

先在七牛云官网注册一个账号

然后点击对象存储-空间管理-新建空间 创建一个存储空间

创建好之后就完成了第一步 可以往里面放东西了

第二步:

打开你的VS 创建一个类 改成静态类 方便外部调用

写一个静态的方法

 /// <summary>
 /// 上传文件类
 /// </summary>
 public static class FileHelper
 {
     /// <summary>  
     /// 上传文件到七牛云  
     /// </summary>  
     /// <param name="formFile">本地文件路径</param>  
     /// <param name="key">在七牛云上的文件名</param>  
     /// <returns>上传结果</returns>  
     public static HttpResult UploadFile(IFormFile file)
     {
         try
         {
             // 定义常量
             const string accessKey = "AK";//公钥
             const string secretKey = "SK";
             // 输入秘钥
             Mac mac = new Mac(accessKey, secretKey);
             // 创建上传配置  
             Config config = new Config();
             // 使用Zone0作为上传区域,你可以根据需要更改  
             config.Zone = Zone.ZONE_CN_East;
             // 初始化上传管理对象  
             FormUploader formuploader = new FormUploader(config);
             // 调用SDK上传文件  
             try
             {
                 //打开文件流
                 using (Stream? stream = file.OpenReadStream())
                 {
                     // 生成上传凭证  
                     PutPolicy putPolicy = new PutPolicy();
                     // 七牛云空间名称
                     putPolicy.Scope = "存储空间的名称";
                     // 生成上传凭证  
                     string upToken = Auth.CreateUploadToken(mac, putPolicy.ToJsonString());
                     // 保留原始文件名(包含扩展名)  
                     string key = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
                     // 创建HttpResult对象用于存储上传结果 
                     HttpResult result = formuploader.UploadStream(stream, key, upToken, null);
                     // 返回上传结果  
                     return result;
                 }
             }
             catch (Exception ex)
             {
                 // 处理其他异常  
                 Console.WriteLine("上传文件发生异常: {0}", ex.Message);
                 throw;
             }
         }
         catch (Exception)
         {

             throw;
         }
     }
     /// <summary>    
     /// 批量上传文件到七牛云    
     /// </summary>    
     /// <param name="formFiles">本地文件集合</param>    
     /// <returns>上传结果列表</returns>    
     public static List<HttpResult> BatchUploadFiles(List<IFormFile> formFiles)
     {
         List<HttpResult> results = new List<HttpResult>();

         // 定义常量  
         const string accessKey = "AK";
         const string secretKey = "SK";

         // 输入秘钥  
         Mac mac = new Mac(accessKey, secretKey);

         // 创建上传配置    
         Config config = new Config();
         // 使用Zone0作为上传区域,你可以根据需要更改    
         config.Zone = Zone.ZONE_CN_East;

         // 初始化上传管理对象    
         FormUploader formUploader = new FormUploader(config);

         foreach (var file in formFiles)
         {
             try
             {
                 // 打开文件流  
                 using (Stream stream = file.OpenReadStream())
                 {
                     // 生成上传凭证    
                     PutPolicy putPolicy = new PutPolicy();
                     // 七牛云空间名称  
                     putPolicy.Scope = "存储空间的名称";

                     // 生成上传凭证    
                     string upToken = Auth.CreateUploadToken(mac, putPolicy.ToJsonString());

                     // 保留原始文件名(包含扩展名)    
                     string key = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');

                     // 调用SDK上传文件    
                     HttpResult result = formUploader.UploadStream(stream, key, upToken, null);

                     // 将结果添加到列表中  
                     results.Add(result);
                 }
             }
             catch (Exception ex)
             {
                 // 处理单个文件上传异常,并记录或处理错误  
                 Console.WriteLine($"上传文件 {file.FileName} 发生异常: {ex.Message}");
                 // 这里可以选择不抛出异常,而是继续处理下一个文件  
                 // 或者你可以根据需要决定是否需要抛出异常  
                 // throw;  
             }
         }

         // 返回所有文件的上传结果  
         return results;
     }
     /// <summary>  
     /// 从七牛云下载文件-注意:是异步方法
     /// </summary>  
     /// <param name="fileName">文件名</param>  
     /// <param name="localFilePath">本地保存路径</param>  
     /// <returns>一个表示操作是否成功的布尔值</returns>  
     public static async Task<bool> DownloadFileAsync(string fileName)
     {
         try
         {
             // 构建下载链接  
             var downloadUrl = $"http://你的外部链接/{fileName}";//你的外部链接+文件名
             //下载的文件目录
             const string targetDirectory = @"D:\下载"; //下载的路径

             // 使用 HttpClient 来执行下载  
             using (var httpClient = new HttpClient())
             {
                 var response = await httpClient.GetAsync(downloadUrl);

                 if (response.IsSuccessStatusCode)
                 {
                     // 构建本地保存文件的完整路径,包括文件名  
                     var localFilePath = Path.Combine(targetDirectory, fileName);
                     // 确保本地目录存在  
                     var directory = Path.GetDirectoryName(localFilePath);
                     if (!Directory.Exists(directory))
                     {
                         Directory.CreateDirectory(directory);
                     }

                     // 将文件内容写入到本地文件  
                     using (var stream = await response.Content.ReadAsStreamAsync())
                     using (var fileStream = File.Create(localFilePath))
                     {
                         await stream.CopyToAsync(fileStream);
                     }

                     return true; // 下载成功  
                 }
                 else
                 {
                     Console.WriteLine($"下载失败,状态码:{response.StatusCode}");
                     return false; // 下载失败  
                 }
             }
         }
         catch (Exception ex)
         {
             Console.WriteLine($"下载时发生异常:{ex.Message}");
             throw; // 重新抛出异常  
         }
     }
 }

  //然后控制器里调用静态方法

  /// <summary>
  /// 上传文件到七牛云
  /// </summary>
  /// <param name="file">文件</param>
  /// <returns>是否成功</returns>
  [HttpPost]
  public IActionResult AddFile(IFormFile file)
  {
      var res = FileHelper.UploadFile(file);
      return Ok(file.FileName);
  }
  /// <summary>
  /// 批量上传文件到七牛云
  /// </summary>
  /// <param name="formFiles"> 文件集合</param>
  /// <returns> 是否成功</returns>
  [HttpPost]
  public IActionResult BatchUploadFiles(List<IFormFile> formFiles)
  {
      var res = FileHelper.BatchUploadFiles(formFiles);
      return Ok(res);
  }

然后就完事了

posted @ 2024-05-17 11:26  Oyx。  阅读(619)  评论(0)    收藏  举报