华为云OSS建桶与文件上传下载删除及检索示例

实践环境

运行环境:

Python 3.5.4

CentOS Linux release 7.4.1708 (Core)/Win10

需要安装以下类库:

https://github.com/huaweicloud/huaweicloud-sdk-python-obs/blob/master/release/huaweicloud-obs-sdk-python_3.22.2.zip

示例

import traceback

try:
from obs import ObsClient
from obs import StorageClass
from obs import CreateBucketHeader
from obs import DeleteObjectsRequest, Object obs_client = None
obs_client = ObsClient(
access_key_id='15K7IJ2GKROGEEEFGG51',
secret_access_key='HVern8SOfk7SAzCEqDoVXySXZgcP7rpf0iJqiyKd',
server='https://obs.cn-south-1.myhuaweicloud.com'
) bucket_name = 'mybucket' # 必须全局唯一 -- 如果该名称被其它账户使用了,那么不能再用该名称创建通过桶 location = 'cn-south-1' # 检查桶是否存在
resp = obs_client.headBucket(bucket_name)
if resp.status < 300:
print('Bucket %s 已存在' % bucket_name)
elif resp.status == 404:
print('Bucket %s 不存在' % bucket_name) # 创建桶
resp = obs_client.createBucket(bucketName=bucket_name, header=CreateBucketHeader(aclControl='private', storageClass=StorageClass.WARM), location=location)
if resp.status < 300:
print('requestId:', resp.requestId)
else:
print('errorCode:', resp.errorCode)
print('errorMessage:', resp.errorMessage) # 上传本地文件
resp = obs_client.putFile(bucket_name, 'f2b/artifacts/artifacts-0bb40b.tar.gz', 'd:\\artifacts-17a86f.tar.gz')
if resp.status < 300:
print('requestId:', resp.requestId)
print('etag:', resp.body.etag)
print('versionId:', resp.body.versionId)
print('storageClass:', resp.body.storageClass)
else:
print('errorCode:', resp.errorCode)
print('errorMessage:', resp.errorMessage) # 下载文件 # downloadPath: 下载的文件本地存储路径,如果不存在,会自动创建。注意:如果要将文件存在到当前路径下,不能仅写文件,会报错,需要写成 ./文件名称,形如 ./artifacts.tar.gz'
# resp = obs_client.getObject(bucket_name, 'f2b/artifacts/artifacts-0bb40b.tar.gz', downloadPath='./artifacts.tar.gz')
resp = obs_client.getObject(bucket_name, 'f2b/artifacts/artifacts-0bb40b.tar.gz', downloadPath='d:\\testdir\\artifacts.tar.gz')
if resp.status < 300:
print('requestId:', resp.requestId)
print('url:', resp.body.url)
else:
print('errorCode:', resp.errorCode)
print('errorMessage:', resp.errorMessage) #列举桶内对象
# resp = obs_client.listObjects(bucket_name, prefix = None, max_keys=2) # 如果不需要过滤,则prefix可以设置为None、空字符串
# 如果查询到的文件对象数量超过max_keys则 resp.body.next_marker为下轮查询结果列表中某个对象的key,否则为None
resp = obs_client.listObjects(bucket_name, prefix='f2b/artifacts', max_keys=5)
while resp.status < 300 and resp.body.contents:
print('requestId:', resp.requestId)
print('name:', resp.body.name)
print('prefix:', resp.body.prefix)
print('max_keys:', resp.body.max_keys)
print('is_truncated:', resp.body.is_truncated)
index = 1
print(resp.body.next_marker)
for content in resp.body.contents:
print('object [' + str(index) + ']')
print('key:', content.key)
print('lastModified:', content.lastModified)
print('etag:', content.etag)
print('size:', content.size)
print('storageClass:', content.storageClass)
print('owner_id:', content.owner.owner_id)
print('owner_name:', content.owner.owner_name)
index += 1 if resp.body.next_marker:
resp = obs_client.listObjects(bucket_name, prefix='f2b/artifacts', marker=resp.body.next_marker, max_keys=5)
else:
resp.body.contents = []
else:
if resp.status > 300:
print('errorCode:', resp.errorCode)
print('errorMessage:', resp.errorMessage) # 删除对象
object1 = Object(key='f2b/artifacts/artifacts-0bb40b.tar.gz', versionId=None)
resp = obs_client.deleteObjects(bucket_name, DeleteObjectsRequest(quiet=False, objects=[object1])) if resp.status < 300:
print('requestId:', resp.requestId)
if resp.body.deleted:
index = 1
for delete in resp.body.deleted:
print('delete[' + str(index) + ']')
print('key:', delete.key, ',deleteMarker:', delete.deleteMarker, ',deleteMarkerVersionId:', delete.deleteMarkerVersionId)
print('versionId:', delete.versionId)
index += 1
if resp.body.error:
index = 1
for err in resp.body.error:
print('err[' + str(index) + ']')
print('key:', err.key, ',code:', err.code, ',message:', err.message)
print('versionId:', err.versionId)
index += 1
else:
print('errorCode:', resp.errorCode)
print('errorMessage:', resp.errorMessage)
except Exception:
print('%s' % traceback.format_exc())
finally:
if obs_client:
obs_client.close()

参考连接

https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0803.html

https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0801.html

https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0904.html

https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0911.html

https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0805.html

https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0919.html

https://support.huaweicloud.com/api-obs/obs_04_0022.html

Python 华为云OSS建桶与文件上传下载删除及检索示例的更多相关文章

  1. 阿里云负载均衡SLB的文件上传下载问题解决

    Nfs同步文件夹配置 问题描述 : javaweb应用部署到云服务器上时,当服务器配置了SLB负载均衡的时候,多台服务器就会造成文件上传下载获取不到文件的错误, 解决办法有:1.hdfs  2.搭建f ...

  2. SpringMVC ajax技术无刷新文件上传下载删除示例

    参考 Spring MVC中上传文件实例 SpringMVC结合ajaxfileupload.js实现ajax无刷新文件上传 Spring MVC 文件上传下载 (FileOperateUtil.ja ...

  3. Struts2 文件上传,下载,删除

    本文介绍了: 1.基于表单的文件上传 2.Struts 2 的文件下载 3.Struts2.文件上传 4.使用FileInputStream FileOutputStream文件流来上传 5.使用Fi ...

  4. SpringBoot整合阿里云OSS对象存储实现文件上传

    1. 准备工作: 一.首先登录阿里云OSS对象存储控制台创建一个Bucket作为你的存储空间. 二.创建Access Keyan按要求创建进行,这里的方法步骤我就不展现出来了,你们可以自行查询阿里云文 ...

  5. java操作FTP,实现文件上传下载删除操作

    上传文件到FTP服务器: /** * Description: 向FTP服务器上传文件 * @param url FTP服务器hostname * @param port FTP服务器端口,如果默认端 ...

  6. [java]文件上传下载删除与图片预览

    图片预览 @GetMapping("/image") @ResponseBody public Result image(@RequestParam("imageName ...

  7. Python 基于Python实现Ftp文件上传,下载

    基于Python实现Ftp文件上传,下载   by:授客 QQ:1033553122 测试环境: Ftp客户端:Windows平台 Ftp服务器:Linux平台 Python版本:Python 2.7 ...

  8. Python接口自动化——文件上传/下载接口

    〇.前言 文件上传/下载接口与普通接口类似,但是有细微的区别. 如果需要发送文件到服务器,例如:上传文档.图片.视频等,就需要发送二进制数据,上传文件一般使用的都是 Content-Type: mul ...

  9. JAVA Web 之 struts2文件上传下载演示(一)(转)

    JAVA Web 之 struts2文件上传下载演示(一) 一.文件上传演示 1.需要的jar包 大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/ ...

  10. python3 + selenium 之文件上传下载

    文件上传 文件上传下载的联系html: uplad.html <html> <head> <meta http-equiv="content-type" ...

随机推荐

  1. uniapp uni-number-box组件 步长为1,还能输入小数思路分享

    正常情况,输入了步长为1,是无法在输入小数的.需求是要能输入一位小数,但如果直接步长设为0.1,又不能按1这样递增,输入数量上用起来肯定很麻烦. 于是我就想了一个折中方法,步长设为:1.01,然后值改 ...

  2. Java JVM——1.JVM与Java体系结构

    前言 作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题? ✘ 运行着的线上系统突然卡死,系统无法访问,甚至直接OOMM! ✘ 想解决线上JVM GC问题,但却无从下手. ✘ 新项目上线,对各 ...

  3. go 有向简单图 十字链表

    package main import "fmt" type CrossEdgeNode struct { tailVex int // 尾顶点 headVex int // 头顶 ...

  4. Native如何使用Tunnel Mode

    mAudioSessionId = AudioSystem::newAudioUniqueId(AUDIO_UNIQUE_ID_USE_SESSION); mHwSync = AudioSystem: ...

  5. ASP.NET Core环境Web Audio API+SingalR+微软语音服务实现web实时语音识别

    处于项目需要,我研究了一下web端的语音识别实现.目前市场上语音服务已经非常成熟了,国内的科大讯飞或是国外的微软在这块都可以提供足够优质的服务,对于我们工程应用来说只需要花钱调用接口就行了,难点在于整 ...

  6. 【工作记录】JDBC连接MySQL,跨时区调查CST转Asia/Shangha

    根据业务要求,不同的国家设置jvm参数,来确定当前时区. // -Duser.timezone=Asia/Kolkata 印度加尔各答 GMT+05:30 // -Duser.timezone=Asi ...

  7. 薄书的pytorch项目实战lesson49-情感分类+蹭免费GPU

    项目来源 B站视频pytorch项目实战-情感分类问题 github lesson49-情感分类实战 1 实验环境 在这里和大家推荐一个学习ML和DL的一个实验运行平台,就是google的Colabo ...

  8. C#笔记 线扫相机利用串口通信设置曝光

    1. 串口通信 串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件.一般完成这种功能的电路,我们称为串行接口电 ...

  9. (拼多多)pdd的Anti-Content

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...

  10. INFINI Easysearch 与华为鲲鹏完成产品兼容互认证

    何为华为鲲鹏认证 华为鲲鹏认证是华为云围绕鲲鹏云服务(含公有云.私有云.混合云.桌面云)推出的一项合作伙伴计划,旨在为构建持续发展.合作共赢的鲲鹏生态圈,通过整合华为的技术.品牌资源,与合作伙伴共享商 ...