首页 > 其他分享 >.NET 上传文件到华为云OBS

.NET 上传文件到华为云OBS

时间:2023-10-16 15:59:56浏览次数:40  
标签:string HuaWeiOBS obs public 华为 new NET OBS

一、创建一个HuaWeiOBS类,作为数据传递的对象。

 1 public class HuaWeiOBS
 2     {
 3         public string AK { get; set; } 
 4         public string SK { get; set; } 
 5         /// <summary>
 6         /// OBS桶终结点
 7         /// </summary>
 8         public string EndPoint { get; set; } 
 9         /// <summary>
10         /// 要上传的问题件路径
11         /// </summary>
12         public string FilePath { get; set; }
13         /// <summary>
14         /// OBS桶名称
15         /// </summary>
16         public string BucketName { get; set; }
17         /// <summary>
18         /// 文件上传到OBS后的名称
19         /// </summary>
20         public string ObjectName { get; set; }
21         /// <summary>
22         /// 要上传到OBS的流
23         /// </summary>
24         public Stream InputStream{ get; set; }
25     }

二、封装一个上传华为云OBS的工具类。

 1   public class UploadFileOBS
 2     {
 3         /// <summary>
 4         /// 上传文件到OBS文件服务器
 5         /// </summary>
 6         /// <param name="filePath">待上传文件的本地路径</param>
 7         /// <param name="obsBucketName">华为云OBS桶的名称</param>
 8         /// <param name="obsObjectName">要上传到的OBS对象的名称</param>
 9         /// <returns></returns>
10         public static bool UploadFileToOBS(HuaWeiOBS obs)
11         {
12             try
13             {
14                 if (string.IsNullOrEmpty(obs.AK))
15                 {
16                     MyLog4NetInfo.Error(MethodBase.GetCurrentMethod().DeclaringType,
17                         new Exception("obs.AK不能为空,请添加配置【HuaWeiOBS:AK】"));
18                     return false;
19                 }
20                 if (string.IsNullOrEmpty(obs.SK))
21                 {
22                     MyLog4NetInfo.Error(MethodBase.GetCurrentMethod().DeclaringType,
23                         new Exception("obs.SK不能为空,请添加配置【HuaWeiOBS:SK】"));
24                     return false;
25                 }
26                 if (string.IsNullOrEmpty(obs.EndPoint))
27                 {
28                     MyLog4NetInfo.Error(MethodBase.GetCurrentMethod().DeclaringType,
29                         new Exception("obs.EndPoint不能为空,请添加配置【HuaWeiOBS:EndPoint】"));
30                     return false;
31                 }
32                 if (string.IsNullOrEmpty(obs.BucketName))
33                 {
34                     MyLog4NetInfo.Error(MethodBase.GetCurrentMethod().DeclaringType,
35                         new Exception("obs.BucketName不能为空,请添加配置【HuaWeiOBS:BucketName】"));
36                     return false;
37                 }
38                 ObsClient obsClient = new ObsClient(obs.AK, obs.SK, obs.EndPoint);
39                 PutObjectRequest request = new PutObjectRequest();
40                 PutObjectResponse response = new PutObjectResponse();
41                 if (!string.IsNullOrEmpty(obs.FilePath))
42                 {
43                     request.BucketName = obs.BucketName;
44                     request.FilePath = obs.FilePath;
45                     request.ObjectKey = obs.ObjectName;
46                     response = obsClient.PutObject(request);
47                 }
48                 else if (obs.InputStream != null)
49                 {
50                     obs.InputStream.Seek(0, SeekOrigin.Begin);
51                     request.BucketName = obs.BucketName;
52                     request.InputStream = obs.InputStream;
53                     request.ObjectKey = obs.ObjectName;
54                     response = obsClient.PutObject(request);
55                 }
56                 else
57                 {
58                     //上传文件为空59                 }
60                 return response.StatusCode == System.Net.HttpStatusCode.OK;
61             }
62             catch (Exception e)
63             {
64                 //打印异常
65                 return false;
66             }
67         }
68 
69         public static HuaWeiOBS GetOBSSetting()
70         {
71             HuaWeiOBS obs = new HuaWeiOBS();
72             obs.AK = System.Configuration.ConfigurationManager.AppSettings["HuaWeiOBS:AK"];
73             obs.SK = System.Configuration.ConfigurationManager.AppSettings["HuaWeiOBS:SK"];
74             obs.EndPoint = System.Configuration.ConfigurationManager.AppSettings["HuaWeiOBS:EndPoint"];
75             obs.BucketName = System.Configuration.ConfigurationManager.AppSettings["HuaWeiOBS:BucketName"];
76             return obs;
77         }

三、文件路径(URL)和 流上传

1、流上传:将获取到的流以 byte[] 的方式存储起来,在调用 UploadFileOBS.UploadFileToOBS(HuaWeiOBS obs)方法前,需将存储好的 byte[] 转换成MemoryStream流。也就是 obs.InputStream = new MemoryStream(byteArray);

1 var obs = UploadFileOBS.GetOBSSetting();
2 obs.InputStream = new MemoryStream(byteArray);
3 var isSuccess = UploadFileOBS.UploadFileToOBS(obs);

然后调用上面已经封装好的 UploadFileToOBS 方法,将HuaWeiOBS对象传递进去即可。

 1         /// <summary>
 2         /// </summary>
 3         /// <param name="url">图片连接地址</param>
 4         /// <param name="keyId">业务数据的主键</param>
 5         /// <returns></returns>
 6         public byte[] GetImageStream(string url)
 7         {
 8             if (string.IsNullOrEmpty(url))
 9             {
10                 return null;
11             }
12             var client = new RestClient(url);
13             var restRequest = new RestRequest();
14             var restResponse = client.Execute(restRequest);
15             if (restResponse.StatusCode == System.Net.HttpStatusCode.OK)
16             {
17                 using (MemoryStream stream = new MemoryStream(restResponse.RawBytes))
18                 {
19                     stream.Seek(0, SeekOrigin.Begin);
20                     return stream.ToArray();
21                 }
22             }
23             else
24             {
25                 //打印异常26                 return null;
27             }
28 
29         }

2、文件路径(URL):获取到文件的绝对路径,然后将改路径赋值给华为云OBS对象的FilePath属性。

1  var obs = UploadFileOBS.GetOBSSetting();
2  var filePath = @“文件路径”;
3  obs.FilePath = filePath;
4  var isSuccess = UploadFileOBS.UploadFileToOBS(obs);

 

标签:string,HuaWeiOBS,obs,public,华为,new,NET,OBS
From: https://www.cnblogs.com/zhengqitong/p/17767493.html

相关文章

  • kubernetes集群中pod访问外网丢包严重问题排查:mtu值设置不对
    kubernetes集群中pod访问外网丢包严重问题排查:mtu值设置不对问题描述和初步判断k8s中部署的数据中台调用指云(open.imzhiyun.com)的sdk接口,调用了23次,成功了3次,其余20次都失败。我这边通过在宿主机上进行tcpdump抓包抓包命令:1.查出调用sdk的容器名称2.查出该容器所在宿主机......
  • 记一次 .NET某新能源检测系统 崩溃分析
    一:背景1.讲故事前几天有位朋友微信上找到我,说他的程序会偶发性崩溃,一直找不到原因,让我帮忙看一下怎么回事,对于这种崩溃类的程序,最好的办法就是丢dump过来看一下便知,话不多说,上windbg说话。二:WinDbg分析1.到底是哪里的崩溃对于一个崩溃类的dump,寻找崩溃点非常重要,常用的命......
  • What is @RenderSection in asp.net MVC - Stack Overflow
    [email protected]@RenderSectionandhowdoesitfunction?Iunderstandwhatbundlesdo,butIhaveyettofigureoutwhatthisdoesandit'sprobablyimportant.@RenderSection("scrip......
  • Build ASP.NET Core applications deployed as Linux containers into an AKS/Kuberne
    原文:https://learn.microsoft.com/en-us/dotnet/architecture/containerized-lifecycle/design-develop-containerized-apps/build-aspnet-core-applications-linux-containers-aks-kubernetesAzureKubernetesServices(AKS)isAzure'smanagedKubernetesorchestrat......
  • HarmonyOS/OpenHarmony原生应用开发-华为Serverless服务支持情况(四)
    文档中的TS作者认为就是ArkTS之意。一、云存储AppGalleryConnect(简称AGC)云存储是一种可伸缩、免维护的云端存储服务,可用于存储图片、音频、视频或其他由用户生成的内容。借助云存储服务,您可以无需关心存储服务器的开发、部署、运维、扩容等事务,大大降低了应用使用存储的门槛,让您可......
  • ASP.NET Core Minimal API之optional route parameter with default value and option
    publicstaticvoidMain(string[]args){varbuilder=WebApplication.CreateBuilder(args);varapp=builder.Build();app.MapGet("/product/{name}",(stringname)=>$"Theproductis{name}").WithName("product&......
  • 为.NET打开新大门:OpenVINO.NET开源项目全新发布
    在AI的应用越来越广泛的今天,优化深度学习模型并进行推理部署已经成为了一门必要的技术。Intel开发的OpenVINO工具包(OpenVisualInferenceandNeuralnetworkOptimization)就是这样一款强大的工具。作为一个开源的工具包,OpenVINO为开发者提供了强大的深度学习模型优化和推理功能,......
  • .NET 一些常用的类型转换扩展
    ///<summary>///转换扩展类///</summary>publicstaticpartialclassExtensions{#region转换为long///<summary>///将object转换为long,若转换失败,则返回0。不抛出异常。///</summary>///&l......
  • 华为云发布CodeArts APIMock服务,精准Mock,并行开发零等待!
    本文分享自华为云社区《华为云发布CodeArtsAPIMock服务,精准Mock,并行开发零等待!》,作者:华为云头条。2023年10月10日,华为云正式发布CodeArtsAPIMock服务,这是一款模拟API响应的仿真工具,能够生成开发者所需的API响应数据,帮助开发人员和测试人员在软件研发过程中快速开展调试和验证......
  • .NET高性能开发-位图索引(一)
    首先来假设这样一个业务场景,大家对于飞机票应该不陌生,大家在购买机票时,首先是选择您期望的起抵城市和时间,然后选择舱等(公务舱、经济舱),点击查询以后就会出现航班列表,随意的点击一个航班,可以发现有非常多组价格,因为机票和火车票不一样,它的权益、规则更加的复杂,比如有机票中有针对......