Python 华为云OSS建桶与文件上传下载删除及检索示例
华为云OSS建桶与文件上传下载删除及检索示例
实践环境
运行环境:
Python 3.5.4
CentOS Linux release 7.4.1708 (Core)/Win10
示例
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建桶与文件上传下载删除及检索示例的更多相关文章
- 阿里云负载均衡SLB的文件上传下载问题解决
Nfs同步文件夹配置 问题描述 : javaweb应用部署到云服务器上时,当服务器配置了SLB负载均衡的时候,多台服务器就会造成文件上传下载获取不到文件的错误, 解决办法有:1.hdfs 2.搭建f ...
- SpringMVC ajax技术无刷新文件上传下载删除示例
参考 Spring MVC中上传文件实例 SpringMVC结合ajaxfileupload.js实现ajax无刷新文件上传 Spring MVC 文件上传下载 (FileOperateUtil.ja ...
- Struts2 文件上传,下载,删除
本文介绍了: 1.基于表单的文件上传 2.Struts 2 的文件下载 3.Struts2.文件上传 4.使用FileInputStream FileOutputStream文件流来上传 5.使用Fi ...
- SpringBoot整合阿里云OSS对象存储实现文件上传
1. 准备工作: 一.首先登录阿里云OSS对象存储控制台创建一个Bucket作为你的存储空间. 二.创建Access Keyan按要求创建进行,这里的方法步骤我就不展现出来了,你们可以自行查询阿里云文 ...
- java操作FTP,实现文件上传下载删除操作
上传文件到FTP服务器: /** * Description: 向FTP服务器上传文件 * @param url FTP服务器hostname * @param port FTP服务器端口,如果默认端 ...
- [java]文件上传下载删除与图片预览
图片预览 @GetMapping("/image") @ResponseBody public Result image(@RequestParam("imageName ...
- Python 基于Python实现Ftp文件上传,下载
基于Python实现Ftp文件上传,下载 by:授客 QQ:1033553122 测试环境: Ftp客户端:Windows平台 Ftp服务器:Linux平台 Python版本:Python 2.7 ...
- Python接口自动化——文件上传/下载接口
〇.前言 文件上传/下载接口与普通接口类似,但是有细微的区别. 如果需要发送文件到服务器,例如:上传文档.图片.视频等,就需要发送二进制数据,上传文件一般使用的都是 Content-Type: mul ...
- JAVA Web 之 struts2文件上传下载演示(一)(转)
JAVA Web 之 struts2文件上传下载演示(一) 一.文件上传演示 1.需要的jar包 大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/ ...
- python3 + selenium 之文件上传下载
文件上传 文件上传下载的联系html: uplad.html <html> <head> <meta http-equiv="content-type" ...
随机推荐
- 食道测压结合Manoview软件
我认为是位于食道开始的地方是上食道括约肌(UES):upper esophageal sphincte,吞咽时,此处的压力会有变大.食道结束的地方是食道下括约肌(LES),从这在往下就是胃,一般情况这 ...
- 慢查询SQL优化
记一次慢查询的SQL优化 测试表结构 MariaDB [shoppings]> desc login_userinfo; +------------+-------------+------+- ...
- npm包管理器 切换npm源 使用nrm来管理npm镜像源
npm是NodeJs项目模块管理工具,它已经集成了nodejs安装包中,在npm从从5.2版开始,增加了 npx 命令(解决的主要问题,就是调用项目内部安装的模块,很多工具不再需要npm -g 全局来 ...
- IDEA的安装、激活(到25年2月)&汉化
1,在官网下载IDEA软件,官网 2,下载之后,双击安装包,然后一直点击next即可. (中间可以按照自己的要求设置安装目录) 3,快捷方式和java打钩 4,点击install即可进行安装,时间有一 ...
- 看我地win 11截图,啪啪的~
挂载20G内存直接虚拟内存关闭到默认125兆了 这个得设置,不设置会非常卡,字多图多得都要设置
- invalid comparison: java.util.ArrayList and java.lang.String 异常分析及解决方法
nvalid comparison: java.util.ArrayList and java.lang.String 异常解决方法异常原因首先我们可以确定是在mybatis的xml中的 list 操 ...
- JavaScript中如何终止forEach循环&跳出for(双层)循环?
在JavaScript中,forEach方法是用于遍历数组的,通常没有直接终止循环的机制.然而,我们可以使用一些技巧来模拟终止forEach循环.以下是几种常见的方法 1.使用return语句:在fo ...
- 《最新出炉》系列入门篇-Python+Playwright自动化测试-51- 字符串操作 - 上篇
1.简介 在日常的自动化测试工作中进行断言的时候,我们可能经常遇到的场景.从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言.这个时候就需要我们对字符串进行操作,宏哥 ...
- 【iOS】push控制器时隐藏tabbar,dismiss控制器时显示tabbar
在push之前将控制器的属性hidesBottomBarWhenPushed设置为yes就好. //准备要把控制器vc给push出去了 UIViewController *vc = [[UIViewC ...
- 实验8.Vlan Hybrid实验
# 实验8.Vlan Hybrid实验 本实验用于测试华为独有的混合式接口类型hybrid 实验组 配置交换机 对交换机sw1与sw2做具体配置 SW1 vlan ba 10 20 100 int g ...