【AGC】云存储服务端使用方法

 【集成准备】

1、Python环境配置

下载Python和PyCharm并安装。

cke_125677.png

使用安装的python本身作为解释器。

cke_134497.png

安装AGC Python SDK。

cke_139799.png​云存储包安装完成。

2、AGC环境配置

在AGC创建项目和应用

cke_148779.png

开通云存储服务。

返回项目设置界面,选择Server SDK 页签,在认证凭据处点击创建按钮,然后下载认证凭据。

cke_154152.png

将认证凭据导入到项目中

【布局设计】

本次测试的Demo是一个Python服务,所以没有界面UI。

【功能实现】

引入AGC与云存储模块

from agconnect.cloud_storage import AGCCloudStorageExceptionfrom agconnect.cloud_storage import GetFilesOptionsfrom agconnect.cloud_storage import Metadatafrom agconnect.cloud_storage import StorageManagementfrom agconnect.common_server import AGCClient, CredentialParser, logger

将下载的凭据文件放入项目中,调用AGCClient.initialize方法初始化AGCClient实例

将配置开发环境中获取的认证凭据放置到自定义的目录,通过initialize方法初始化对应认证凭据的AGCClient实例。

通过StorageManagement()来初始化存储实例。

bucket_name = 'cloudstoragepython-kyuv2'file_name = 'test.txt' # for example: "test.txt"config_path = os.path.normpath(os.path.join(os.path.dirname(__file__), 'agc-apiclient-1157238089186298880-7233693580609187129.json'))credential = CredentialParser.to_credential(config_path)AGCClient.initialize(credential=credential)storage = StorageManagement()bucket = storage.bucket(bucket_name)

上传文件

使用bucket.upload方法将文件上传到云端。

def upload_file(bucket):config_path = os.path.normpath(os.path.join(os.path.dirname(__file__), 'C:\Users\kwx1075489\Desktop\agcserversdk-python-1.3.0.300\test.txt'))if not os.path.exists(config_path):logger.error("file does not exist")loop = asyncio.new_event_loop()try:asyncio.set_event_loop(loop)result = loop.run_until_complete(bucket.upload(path_str=config_path))logger.info(f"Upload file response: {result}")except (Exception, AGCCloudStorageException) as e:raise AssertionError(f"An error occurred during the upload file process: {e}")finally:loop.close()

调用file.get_metadata方法获取设置在云端的元数据

def get_file_metadata(bucket, file_name):file = bucket.file(file_name)loop = asyncio.new_event_loop()try:asyncio.set_event_loop(loop)result = loop.run_until_complete(file.get_metadata())res_json = loop.run_until_complete(result.json(content_type='text/plain'))logger.info(f"Get file metadata: {res_json}")except (Exception, AGCCloudStorageException) as e:raise AssertionError(f"An error occurred during the get file metadata: {e}")finally:loop.close()

调用file.set_metadata方法将文件属性的元数据和自定义的元数据覆盖到云端。

def update_file_metadata(bucket, file_name):file = bucket.file(file_name)loop = asyncio.new_event_loop()try:asyncio.set_event_loop(loop)get_result = loop.run_until_complete(file.get_metadata())get_result_text = loop.run_until_complete(get_result.text())get_result_json = json.loads(get_result_text)metadata = Metadata(content_language='en-US', custom_metadata={'test': 'test'},content_type=get_result_json.get('contentType'))set_result = loop.run_until_complete(file.set_metadata(metadata))set_result_json = loop.run_until_complete(set_result.json(content_type='text/plain'))logger.info(f"Update file metadata response: {set_result_json}")except (Exception, AGCCloudStorageException) as e:raise AssertionError(f"An error occurred during the update file metadata: {e}")finally:loop.close()

调用file.download方法将云端文件数据写入本地文件中。

def download_file(bucket, file_name):def progress_callback(progress: Dict[str, int] = None):logger.info(f"Downloaded {progress['writtenBytes']} bytes out of {progress['totalBytes']}")loop = asyncio.new_event_loop()asyncio.set_event_loop(loop)try:local_file = os.path.normpath(os.path.join(os.path.dirname(__file__), ' C:\Users\kwx1075489\Desktop'))if not os.path.exists(local_file):logger.error("file does not exist")remote_file = bucket.file(file_name)text, resp = loop.run_until_complete(remote_file.download(local_file, on_download_progress=progress_callback))logger.info(f"Download file response: {resp}")assert text == "File downloaded successfully. "except (Exception, AGCCloudStorageException) as e:raise AssertionError(f"An error occurred during the download file process: {e}")finally:loop.close()

调用file.download方法获取当前目录下的文件与子目录。

def get_files(bucket):loop = asyncio.new_event_loop()asyncio.set_event_loop(loop)options = GetFilesOptions(delimiter="/")try:result = loop.run_until_complete(bucket.get_files(options=options))logger.info(f"Get file list response: {result}")except (Exception, AGCCloudStorageException) as e:raise AssertionError(f"An error occurred during the get file list: {e}")finally:loop.close()

调用file.delete方法删除云端文件。

def get_files(bucket):loop = asyncio.new_event_loop()asyncio.set_event_loop(loop)options = GetFilesOptions(delimiter="/")try:result = loop.run_until_complete(bucket.get_files(options=options))logger.info(f"Get file list response: {result}")except (Exception, AGCCloudStorageException) as e:raise AssertionError(f"An error occurred during the get file list: {e}")finally:loop.close()

【功能测试】

执行python main.py命令,服务依次执行:

上传“test.txt”文件到云端:

cke_165928.png

从云端下载“test.txt”文件到本地目录:

从云端删除“cloudstoragepython-kyuv2”存储区的“test.txt”文件:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/209633.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis高可用之主从复制及哨兵模式

一、Redis的主从复制 1.1 Redis主从复制定义 主从复制是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础之上实现高可用; 主从复制实现数据的多级备份,以及读写分离(主服务器负责写,从服务器只能读) 1.2 主从复制流…

系统中正在运行的进程数量和等待运行时间的可运行进程数量计算猜测

vmstat的r输出是包含正在运行和等待运行时间的可运行进程的数量。 ps r的输出中是只包含正在运行的进程,于是通过“ ps r |awk ‘{if (NR >1) print $0}’ |wc -l ”可以统计出正在运行中的进程的数量。 那么根据上面的结果,等待运行时间的进程的…

创建vue项目体验

文章目录 使用vue-cli创建vue项目创建出的项目目录结构配置router 运行问题router未找到eslint报错 首页显示单页面内容替换 使用vue-cli创建vue项目 安装vue-cli,创建基本项目 选择步骤 一般创建成功后,提示使用下面的指令运行demo npm run serve创建…

docker compose搭建渗透测试vulstudy靶场示例

前言 渗透测试(Penetration test)即网络安全工程师/安全测试工程师/渗透测试工程师通过模拟黑客,在合法授权范围内,通过信息搜集、漏洞挖掘、权限提升等行为,对目标对象进行安全测试(或攻击)&am…

人物血条的制作_unity基础开发教程

人物血条的制作 场景创建导入素材血条制作血量控制代码部分 场景创建 随便创建一个地板、一个胶囊体,搭建一个简易的场景,我这里就继续使用前面文章创建的场景 导入素材 在unity编辑器中选择Window,点击Asset Store 点击Search online 在搜…

CVE-2022-21661

简介 CVE-2022-21661是一个与WordPress相关的漏洞,涉及到SQL注入问题。该漏洞主要源于WordPress的WQ_Tax_Query类中的clean_query函数,可能允许攻击者通过控制传递给该函数的数据来控制生成的SQL查询,从而执行任意的SQL代码。 当WordPress的…

C语言运算符详解

详细介绍了C语言表达式、算术运算符、赋值运算符、关系运算符、条件结构、逻辑运算符、位运算符的语法和使用方法,并讨论了运算符的优先级。 1、表达式与算术运算符 在C语言中,表达式是一个类似数学中的算式,表达式由变量、字面值、常量、运…

Visual NLP:图像信息自动提取的未来

本文旨在以简单的方式解释 Visual NLP 的关键概念,让你了解 Visual NLP 的含义、它的用例是什么、如何使用它以及为什么它是构建自动提取管道的未来 。 NSDT在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在…

nvm切换版本之后npm用不了

原因是 nvm只给你安了对应的node没给你安装对应的node版本的npm 解决办法如下 1找到你安装的node版本号 然后去官网下载对应的版本包 这个网址就是node官网的版本列表 Index of /download/release/ 2下载后解压 把根目录这俩复制到自己的nvm安装目录下 还有那个node_modul…

SpringBoot+SSM项目实战 苍穹外卖(1)

目录 产品原型与技术选型后端环境搭建Git版本控制IDEA中运行sql脚本文件nginx反向代理和负载均衡完善登录功能 导入接口文档SwaggerSwagger常用注解 产品原型与技术选型 管理端原型图: 用户端原型图: 餐饮企业内部员工使用。 主要功能有: 模块描述登录…

租车系统开发/多功能租车平台微信小程序源码/汽车租赁系统源码/汽车租赁小程序系统

源码介绍: 多功能租车平台微信小程序源码,作为汽车租赁、摩托车租车平台系统源码,是小程序系统。基于微信小程序的汽车租赁系统源码。 开发环境及工具: 大等于jdk1.8,大于mysql5.5,idea(eclip…

大数据机房迁移该按照什么步骤进行 |数据中心

前言: 机房搬迁不仅仅是把机房的设备迁移到新机房那么简单,而是要求网络系统的迁移和集中存储系统的迁移必须安全平稳,不能过长时间影响生产应用。表面上就是几个IT 民工的搬运,但实际是一项目高度集中的体力与脑力的综合项目。现…