首页 > 其他分享 >obs上传文件到服务器,附件同步到华为云OBS存储备份实践(服务端API应用)

obs上传文件到服务器,附件同步到华为云OBS存储备份实践(服务端API应用)

时间:2023-09-16 10:33:37浏览次数:40  
标签:string obs LogSave API ToString BucketName data OBS

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using GrapeCity.Forguncy.ServerApi;

using OBS;

using OBS.Model;

namespace FileToHuaweiOBS

{

public class FileToHuaweiOBS :ForguncyApi

{

private static string endpoint = "";

private static string AK = "";

private static string SK = "";

private string LocalPath = ""; //本地附件目录

private string defaultObsregion = ""; //默认区域

private string defaultBucketName = ""; //默认桶名

private string obsregion    = ""; //区域

private string BucketName   = ""; //桶名

private string optype       = ""; //操作类型

private string resultCode = "";

private string resultMsg = "";

//日志记录

Dictionary LogValues = new Dictionary();

[Post]

public void obsApi()

{

//获取post请求的数据

var form = this.Context.Request.ReadFormAsync().Result;

obsregion = form["obsregion"];

optype    = form["optype"];

LogSave("api", "接收到POST", "操作:" + optype);

optype = optype.ToLower();

//预留其他操作扩展

switch (optype)

{

case "fileasync":

BucketName = form["BucketName"];

obsObjectAsync(obsregion, BucketName);

break;

default:

this.resultCode = "1";

this.resultMsg = "操作方法错误";

break;

}

//定义返回结果;

//转换数据类型为string

if (resultCode == "0")

{

string result = Convert.ToString("0");

this.Context.Response.Write(result.ToString());

}

else

{

string result = Convert.ToString("1") + "," + this.resultMsg;

this.Context.Response.Write(result.ToString());

}

}

//OBS授权访问信息

public void obsAuth()

{

//获取默认区域

var data = DataAccess.GetTableData(string.Format("访问配置?$select=配置项值&$filter=配置项索引 eq 'obsregion'")) as List>;

if (data.Count != 0)

{

//获取默认区域

defaultObsregion = data[0]["配置项值"].ToString();

//LogSave("OBS", "获取默认区域", defaultObsregion );

}

//获取默认桶

data = DataAccess.GetTableData(string.Format("访问配置?$select=配置项值&$filter=配置项索引 eq 'BucketName'")) as List>;

if (data.Count != 0)

{

//获取默认桶

defaultBucketName = data[0]["配置项值"].ToString();

//LogSave("OBS", "获取默认桶", defaultBucketName );

}

if (obsregion == "")

{

obsregion = defaultObsregion;//设置默认区域

}

//获取区域endpoint

data = DataAccess.GetTableData(string.Format("区域终节点?$select=终节点&$filter=区域代码 eq '"+ obsregion + "'")) as List>;

if (data.Count != 0)

{

//endpoint

endpoint = data[0]["终节点"].ToString();

//LogSave("OBS", "endpoint", endpoint);

}

//获取AK

data = DataAccess.GetTableData(string.Format("访问配置?$select=配置项值&$filter=配置项索引 eq 'OBSAK'")) as List>;

if (data.Count != 0)

{

//AK

AK = data[0]["配置项值"].ToString();

//LogSave("OBS", "AK", AK);//正式启用时注释此行,防止AK泄露

}

//获取SK

data = DataAccess.GetTableData(string.Format("访问配置?$select=配置项值&$filter=配置项索引 eq 'OBSSK'")) as List>;

if (data.Count != 0)

{

//SK

SK = data[0]["配置项值"].ToString();

//LogSave("OBS", "SK", SK);//正式启用时注释此行,防止SK泄露

}

//获取本地附件目录

data = DataAccess.GetTableData(string.Format("访问配置?$select=配置项值&$filter=配置项索引 eq 'LOCALPATH'")) as List>;

if (data.Count != 0)

{

//LocalPath

LocalPath = data[0]["配置项值"].ToString();

//LogSave("OBS", "LocalPath", LocalPath);

}

}

public void obsObjectAsync(string obsregion, string BucketName)

{

obsAuth();

//检查AK\SK\endpoint是否获取到

if (AK == "" || SK == "" || endpoint == "") {

LogSave("OBS", "AK、SK、endpoint", "缺少配置");

return;

}

if (BucketName == "")

{

BucketName = defaultBucketName;//设置默认桶

}

// 创建ObsClient实例

ObsClient client = new ObsClient(AK, SK, endpoint);

int maxfileid = 0;

string filepaths = "";

string appUpLoadPath = LocalPath;// "C:\\ProgramData\\Forguncy\\ibm\\3725\\WebSite\\Upload\";

LogSave("OBS桶对象Async", "maxfileid", "0");

var data = DataAccess.GetTableData(string.Format("文件表?$select=ID,附件&$filter=obs状态 eq 0&$top=1&$orderby=ID desc")) as List>;

if (data.Count != 0)

{

maxfileid = Convert.ToInt32(data[0]["ID"].ToString());

filepaths = data[0]["附件"].ToString();

}

LogSave("OBS桶对象Async", "filepaths成功", filepaths);

string[] filepathArray = filepaths.Split('|');

// 上传文件

if (maxfileid >= 0)

{

try

{

foreach (string filename in filepathArray)

{

if (filename != "")

{

LogSave("OBS桶对象Async", "开始同步", filename);

LogSave("OBS桶对象Async", "开始同步FilePath", appUpLoadPath + filename);

LogSave("OBS桶对象Async", "开始同步到桶", BucketName);

PutObjectRequest request = new PutObjectRequest()

{

BucketName = BucketName,

ObjectKey = filename,

FilePath = appUpLoadPath + filename,//待上传的本地文件路径,需要指定到具体的文件名

};

PutObjectResponse response = client.PutObject(request);

LogSave("OBS桶对象", "文件同步成功", filename);

}

}

//定义键为string,值为object类型的Dictionary

Dictionary values = new Dictionary();

//定义要更新的记录

ColumnValuePair valuepair = new ColumnValuePair();

valuepair.ColumnName = "ID";

valuepair.Value = maxfileid;

//要被更新的值,Key表示列名,值是要被更新的值

values = new Dictionary();

values.Add("obs状态", 1);

//使用UpdateTableData方法更新OBS状态

this.DataAccess.UpdateTableData("文件表", valuepair, values);

}

catch (ObsException ex)

{

LogSave("OBS桶对象", "文件同步失败," + ex.ErrorCode, ex.ErrorMessage);

}

}

}

public void LogSave(string logType, string logTitle, string logBody)

{

Dictionary tempLogValues = new Dictionary();

tempLogValues.Clear();

tempLogValues.Add("日志类型", logType);

tempLogValues.Add("标题", logTitle);

tempLogValues.Add("内容", logBody);

tempLogValues.Add("时间", DateTime.Now.ToString("hh:mm:ss"));

tempLogValues.Add("日期", DateTime.Now.ToString("yyyy-MM-dd"));

this.DataAccess.AddTableData("日志", tempLogValues);

}

}

}

 

标签:string,obs,LogSave,API,ToString,BucketName,data,OBS
From: https://www.cnblogs.com/outrun/p/17706381.html

相关文章

  • YApi 私有化部署(Win)
    YApi官方文档介绍了可视化部署和命令行部署两种私有化部署方式,下面在官方文档的基础上介绍第二种部署方法。环境准备要求有Node(7.6+)、MongoDB(2.6+)、Git。这里只介绍MongoDB的安装。到download/community下载MongoDB,我下载的是7.0.1版。安装MongoDB(见如何在Wind......
  • FastAPI学习-14. JSONResponse 返回JSON内容
    当你创建一个 FastAPI 路径操作 时,你可以正常返回以下任意一种数据:dict,list,Pydantic模型,数据库模型等等。FastAPI 默认会使用 jsonable_encoder 将这些类型的返回值转换成JSON格式,默认情况下会以content-type:application/json格式返回在有些情况下,我们需要在路径操......
  • 设备维修保养通知:如何使用API接口发送通知给相关人员
     在设备维修保养管理中,及时通知相关人员是确保设备得到及时维护的关键。API接口提供了一个方便的方式来自动发送维修保养通知,以确保工作流程的顺利进行。本文将详细介绍如何使用成熟的API接口来发送设备维修保养通知,以确保设备得到及时的维护,同时提供通俗易懂的步骤和代码说明。......
  • knife4j——集成Swagger生成Api文档
      首先是依赖导入<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</version></dependency>    然后是配置文件中的配置/***配置类,注册web层相关组件......
  • Apipost你了解嘛?看这篇文章就够了
    在数字化时代,API已经成为了应用程序之间进行通信的关键桥梁。随着API的普及和复杂性的增加,API研发和管理也面临着越来越多的挑战。为了更好地应对这些挑战,Apipost提供了一整套API研发工具,包括API设计、API调试、API文档和API自动化测试等功能。本文将深入介绍Apipost的优势和特点,......
  • fastapi
    fastapiFastApi官网:https://fastapi.tiangolo.com/zh/-FastAPI是一个用于构建API的现代、快速(高性能)的web框架,使用Python3.6+并基于标准的Python类型提示。-可与NodeJS和Go并肩的极高性能(归功于Starlette和Pydantic)。最快的Pythonweb框架之一。#pip......
  • FastApi async函数一定比普通函数快吗,你是否有相同的问号
    FastAPI是一个用于构建API的现代、快速(高性能)的web框架,使用Python3.6+并基于标准的Python类型提示关键特性:快速:可与NodeJS和Go并肩的极高性能(归功于Starlette和Pydantic)。最快的Pythonweb框架之一。高效编码:提高功能开发速度约200%至300%。*更少......
  • Adding API Key Authentication to a FastAPI application
    https://joshdimella.com/blog/adding-api-key-auth-to-fast-apiStep1:DefineaListofValidAPIKeysAPI_KEYS=["9d207bf0-10f5-4d8f-a479-22ff5aeff8d1","f47d4a2c-24cf-4745-937e-620a5963c0b8","b7061546-75e8-444b-a2c4......
  • 【接口自动化测试】Eolink Apilkit 安装部署,支持 Windows、Mac、Linux 等系统
    EolinkApikit有三种客户端,可以依据自己的情况选择。三种客户端的数据是共用的,因此可以随时切换不同的客户端。我们推荐使用新推出的ApikitPC客户端,PC端拥有线上产品所有的功能,并且针对本地测试、自动化测试以及使用体验等方面进行了强化,可以提供最佳的使用感受。建议对......
  • uniapp VUE-H5页面微信公众号内使用微信JSAPI支付
    注意看本文主要讲解uniapp打包成h5页面并部署在公众号时使用JSAPI的微信支付问题前期准备工作.首先要有一个开通商户注册的公众号,我们需要他的appid;.其次要开通商户公众号的公众号支付的功能并添加域名,开通完成后就可以基本开始我们的开发了既然是jsapi开发自然是要引入的......