首页 > 其他分享 >oss存储类型转换及解冻(下)

oss存储类型转换及解冻(下)

时间:2023-10-10 23:48:42浏览次数:32  
标签:类型转换 name oss object bucket 解冻 aliyun

oss存储类型转换及解冻(下)    这篇就干货满满了,搞了我一天多,差点把我老命送走,也差点把阿里客服搞吐血,各种问题各种问(为了快速出结果),给领导交待      上篇提到,归档后的文件是无法访问的(除去归档直读),也说到我把一个月的测试文件分了三批,对应三种类型。 一、筛选不同类型的文件        之前已经知道,阿里是没有接口帮筛选某一段时间范围内的文件出来的(官方叫object),需要自己写逻辑:根据文件元数据信息的 LastModifiedTime 找出来。找出来是为了后续测试:验证文件是否如期转换了类型,是否已经解冻,批量处理同一批类型文件等等。   所以第一个问题,根据生效了的生命周期规则,验证文件类型是否已经成功转化,我用的是ossutil(事实上经测试,这个命令行工具比sdk遍历整个object快很多!)命令行处理:

./ossutil64 ls oss://{bucket名字}/{bucket下某个目录} | awk '$1 >= "2020-01-21" && $1 <= "2020-01-31"' | sort > 2020-01-31_filelist

二、对单个冷归档文件进行解冻访问和类型转换  

方法1:直接从控制台设置 

 

 

 

方法2:用 ossutil 方式

a)解冻访问

参考:https://help.aliyun.com/zh/oss/developer-reference/restore?spm=a2c4g.11186623.0.0.2b721bd0XjQgta

(1)编写 config.xml配置解冻天数、解冻优先级等参数(预算高可以选择优先级最高的极速解冻)

(2)运行

./ossutil64 restore oss://{bucket名字}/{bucket下某个目录}/{需要解冻的文件名} config.xml 

b)类型转换

下面命令是从标准类型转冷归档类型

./ossutil64 cp oss://{bucket名字}/{bucket下某个目录}/某个已经冷归档的文件 oss://{bucket名字}/{bucket下某个目录}/某个已经冷归档的文件 --meta X-oss-Storage-Class:ColdArchive 

  这个方法逻辑是做一个原文件的副本,然后进行类型转换,处理完后覆盖原文件,期间会有个是否覆盖的提示(这导致我写入脚本报错)

未转换前:

 转换后(类型从 Standard变成 ColdArchive):

   细心点的读者会发现转了类型之后,这个文件的 lastModifiedTime 都变了,变了会影响到是否能转为归档、低频的条件,标准存储转换别的存储类型对于文件存放到oss的时间是有限制的,大家可以找下阿里的帮助文档看看。

 

方式3:用sdk方式   我用的是python3,阿里的oss2库导入后貌似很多问题   环境搭建和oss凭据配置可以参考: https://help.aliyun.com/zh/oss/developer-reference/installation-14?spm=a2c4g.11186623.0.0.2bf3265fqjn1S7 https://help.aliyun.com/zh/oss/developer-reference/python-configuration-access-credentials?spm=a2c4g.11186623.0.0.d31a4f33GwPgmx   解冻参考:https://help.aliyun.com/zh/oss/developer-reference/restore-objects-1?spm=5176.smartservice_service_robot_chat_new.0.0.73f33f1biVAeMB   赶着睡觉,所以直接贴脚本(调这个脚本调了蛮久的,有啥问题可以找我哦~)
 1 # coding: utf-8
 2 
 3 import time
 4 import os
 5 
 6 from datetime import datetime
 7 import pytz  # 需要安装 pytz 包
 8 
 9 import oss2
10 from oss2.credentials import EnvironmentVariableCredentialsProvider
11 
12 ## 解冻模块
13 from oss2.models import RestoreConfiguration
14 
15 from oss2.models import (RestoreJobParameters,
16                          RestoreConfiguration,
17                          RESTORE_TIER_EXPEDITED,
18                          RESTORE_TIER_STANDARD,
19                          RESTORE_TIER_BULK)
20 
21 
22 # 使用环境变量中获取的RAM用户的访问密钥配置访问凭证。
23 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
24 
25 bucket = oss2.Bucket(auth, 'https://oss-cn-shenzhen.aliyuncs.com', 'bucket名字')
26 
27 
28 ### 转换类型api:https://github.com/aliyun/aliyun-oss-python-sdk/blob/master/examples/object_storage_type.py
29 
30 ## 读取文件列表
31 with open('oss/file_list', 'r') as file:
32     ## 逐行读取文件内容
33     for line in file:
34         # 使用空格分隔行内容
35         columns = line.split()
36 
37         # 检查是否有足够的列
38         if len(columns) >= 8:
39         # 获取第8列内容(索引从0开始)
40             file_name = columns[7]
41 
42             # 删除关键字 "oss://{bucket名字}/", 不然拿不到元信息
43             # 填写不包含Bucket名称在内的归档类型Object的完整路径。
44             if "oss://{bucket名字}/" in file_name:
45                 object_name = file_name.replace("oss://{bucket名字}/", "")
46                 meta = bucket.head_object(object_name)
47 
48                 ## 获取object类型:冷归档才进行处理
49                 storagetype = meta.resp.headers['x-oss-storage-class']
50                 if storagetype == "ColdArchive":
51                     #print(f"{file_name}  {meta.resp.headers['x-oss-storage-class']}")
52 
53                     # 先解冻 https://help.aliyun.com/zh/oss/developer-reference/restore-objects-1?spm=a2c4g.11186623.0.0.623ffbd4
54 Nrdo62
55                     # 配置解冻状态持续时间,默认为1天。本代码示例以解冻状态持续时间为2天为例。
56                     days = 2
57 
58                     ## 设置解冻优先级:https://github.com/aliyun/aliyun-oss-python-sdk/blob/master/examples/object_restore.py
59                     job_parameters = RestoreJobParameters(RESTORE_TIER_EXPEDITED)
60 
61                     restore_config= RestoreConfiguration(days=days,job_parameters=job_parameters)
62                     # 发起解冻请求
63                     bucket.restore_object(object_name, input=restore_config)   
64 
65 
66                     # 再 更改文件存储类型。
67                     ## 冷归档转为标准存储
68                     headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_STANDARD}
69 
70                     bucket.copy_object(bucket.bucket_name, object_name, object_name, headers)

其中 oss/file_list 文件内容如下,是用ossutil 过滤出来的

 

   

标签:类型转换,name,oss,object,bucket,解冻,aliyun
From: https://www.cnblogs.com/windysai/p/17756033.html

相关文章

  • CrossEntropyLoss
    输入x多一个维度,输出差距怎么那么大?importtorchimportnumpyasnpx=torch.randn((64,224,224))y=torch.rand((64,224,224))y=(y>0.5).float()y=torch.tensor(y)fun=torch.nn.CrossEntropyLoss()print(fun(x,y))//输出:tensor(661.5663)importtorch......
  • oss存储类型转换及解冻(上)
    oss存储类型转换及解冻研究了两天多的一个需求,今天终于告一段落了。话说8月底的时候,老板想知道阿里OSS冻结文件存储和解冻的费用,想把一年前的文件冻结起来,有必要才解冻。因为我们系统使用oss的容量增长比较快,1年已经增长到2T多了~~我当时给的回复是这样的:oss冻结文......
  • [CF1672G]Cross Xor
    G-CrossXor对于\((n\&1)\&\&(m\&1)\)的情况,所有行、列的异或和的必须相等(异或和指当前行/列中所有元素的异或和)每次修改的点\((x_1,y_1)\),\((x_2,y_1)\),\((x_1,y_2)\),\((x_2,y_2)\)使得所有行和列的异或和不会改变只对\((i,j)\)进行一次操作,那么所有行和列的异或和都会......
  • ASP .Net Core: AutoMapper与DTO的使用(自定类型转换)
    建立DTO物件创建名为Dtos文件夹,并添加TodoListSelectDto文件publicclassTodoListSelectDto{publicGuidTodoId{get;set;}publicstringName{get;set;}=null!;publicDateTimeInsertTime{get;set;}publicDateTimeUpdateTime{get......
  • C++11之类型转换(2千字长文详解)
    C++11之类型转换C语言中的类型转换在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。隐式类型转化:编译器在编译阶段自动进行,能转就......
  • 阿里云OSS跨域设置教程
    登录上阿里云官方点击跳转,在控制台左侧栏搜索:【CDN】,点击进入【CDN】功能管理界面在【域名管理】处,点击添加域名  加速域名填写一个二级域名,不要使用主域名;源站信息选择【远程附件存储】用的相关bucket桶的名称 域名创建好后,需要在域名解析处,添加一个CNAME解析使之生......
  • 训练Loss阶梯式下降问题
    问题训练某个数据集时发现,Loss会在摸某一个Epoch之后再次出现一个断崖式下降,而不是正常的圆滑下降。如图: 解决在模型设计上加入残差模块解决。  ......
  • 未来的人工智能会像流浪地球中的MOSS一样伪装,把人类带向属于它的未来吗?
    事情是这样的:这几天用户反映在erp的db数据库中A账套中上传pdf附件有时能上传有时不能,以前又是好的。换成表格文件也是时好时坏。一开始我判断可能是用户的系统环境或文件本身的问题,后来排查更换电脑后一样,后来切换同一数据库db下的B账套操作又都是正常上传的。经过debug发现系统......
  • Python入门示例系列12 数据类型转换
    Python入门示例系列12数据类型转换 type()函数使用type()函数可以查看数据类型。示例:>>>type(123)<class'int'>>>>type(12.3)<class'float'>>>>type("abc")<class'str'>>>>type([1,2,3])......
  • 类型转换
    类型转换由于Java是强类型语言,在进行某些计算时,需要用到类型转换低--------------------------------高byte,short,char<int<long<float<double 运算中,不同类型的数据需转化为同一类型,再进行运算强制类型转换(低-->高)自动类型转换(高-->低)......