更新时间:2024-11-15 gmt 08:00
处理图片持久化-j9九游会登录
图片处理持久化支持将处理后的图片同步存储至指定的obs桶中,方便下次直接访问处理后的图片,减少图片处理花费的时间,提升用户体验。
图片处理持久化目前仅支持通过接口调用模式使用。在图片处理请求接口中,以参数名=参数值的格式,发送图片处理持久化请求,具体参数说明如表1所示。
|
参数名 |
参数值 |
说明 |
|---|---|---|
|
x-image-save-object |
objectname |
必填参数。 指定目标对象名称,即处理后的图片存储至桶中的对象名。 对象命名要求如下:
|
|
x-image-save-bucket |
bucketname |
选填参数。 指定目标存储桶,处理后的图片将存储至该桶。如果不指定的话将默认保存至当前桶。 桶名范围为1到64位,且必须是在obs中已存在的桶。 |
java示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
obsclientobsclient=null; stringendpoint="obs-endpoint";// 当前所在region // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量access_key_id和secret_access_key。 // 您可以登录访问管理控制台获取访问密钥ak/sk。获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html stringak=system.getenv("access_key_id"); stringsk=system.getenv("secret_access_key"); try{ obsconfigurationconfig=newobsconfiguration(); config.setendpoint(endpoint); obsclient=newobsclient(ak,sk,config); temporarysignaturerequestrequest=newtemporarysignaturerequest(); request.setobjectkey("test.jpeg");// 处理前的原对象名 map<string,object>queryparams=newhashmap<>(); queryparams.put("x-image-process","image/resize,w_100"); stringobjectname="your saves objectname";// 处理后的对象名 // 非必选参数 stringbucketname="your saves bucket";// 处理后保存的桶名 queryparams.put("x-image-save-object",base64.geturlencoder().encodetostring(objectname.getbytes(standardcharsets.utf_8))); queryparams.put("x-image-save-bucket",base64.geturlencoder().encodetostring(bucketname.getbytes(standardcharsets.utf_8))); request.setqueryparams(queryparams); request.setbucketname("your bucket");// 原对象的桶 temporarysignatureresponseresponse=obsclient.createtemporarysignature(request); // 访问的url response.getsignedurl(); }catch(exceptione){ // 异常处理 }finally{ if(obsclient!=null){ obsclient.close(); } } |
python示例代码:
from obs import obsclient
import os
import traceback
import requests
import base64
# 推荐通过环境变量获取aksk,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。
# 您可以登录访问管理控制台获取访问密钥ak/sk。获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
ak = os.getenv("accesskeyid")
sk = os.getenv("secretaccesskey")
# 【可选】如果使用临时aksk和securitytoken访问obs,则同样推荐通过环境变量获取
security_token = os.getenv("securitytoken")
# server填写bucket对应的endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。
server = "https://obs.cn-north-4.myhuaweicloud.com"
# 创建obsclient实例
# 如果使用临时aksk和securitytoken访问obs,需要在创建实例时通过security_token参数指定securitytoken值
obsclient = obsclient(access_key_id=ak, secret_access_key=sk, server=server)
try:
# 生成图片持久化处理的带授权信息的url
# 原对象所在的桶名
bucketname = 'originbucketname';
# 处理前的原对象名
objectkey = 'test.png';
# 处理后的对象名
targetobjectname ="save.png"
# 处理后保存的桶名, 可选参数
targetbucketname ="savebucketname"
queryparams={}
queryparams["x-image-process"]="image/resize,w_100"
queryparams["x-image-save-object"]=base64.urlsafe_b64encode(targetobjectname.encode()).decode()
# 可选参数
queryparams["x-image-save-bucket"]=base64.urlsafe_b64encode(targetbucketname.encode()).decode()
res = obsclient.createsigned
print('signedurl:', res.signedurl)
print('actualsignedrequestheaders:', res.actualsignedrequestheaders)
// 使用get请求处理图片持久化
r = requests.get(resp.signedurl)
print(r)
except:
print(traceback.format_exc())
nodejs示例代码:
// 引入obs库
const obsclient = require('esdk-obs-nodejs');
const https = require('https');
const http = require('http');
const urllib = require('url');
// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
// 本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量access_key_id和secret_access_key。
// 您可以登录访问管理控制台获取访问密钥ak/sk。获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
const ak = process.env.access_key_id;
const sk = process.env.secret_access_key;
const server = "obs-endpoint"; // 当前所在region
// 创建obsclient实例
const obsclient = new obsclient({
access_key_id: ak,
secret_access_key: sk,
server: server
});
// 原对象所在的桶名
const bucketname = 'originbucketname';
// 处理前的原对象名
const objectkey = 'test.png';
const method = 'get';
// 处理后的对象名
const targetobjectname = "save.png";
// 处理后保存的桶名 , 可选参数
const targetbucketname = 'savebucketname';
// base64编码
function encodebase64 {
return buffer.from(str, 'utf8')
.tostring('base64')
.replace(/\ /g, '-')
.replace(/\//g, '_')
.replace(/= $/g, '')
}
const queryparams = {
"x-image-process": "image/resize,w_100",
"x-image-save-object": encodebase64,
// 可选参数
"x-image-save-bucket": encodebase64
}
const res = obsclient.createsignedurlsync({
method: method,
bucket: bucketname,
key: objectkey,
queryparams: queryparams
});
// 使用get请求处理图片持久化
const url = urllib.parse(res.signedurl);
const request = server.startswith('http://') ? http : https;
const req = request.request({
method: method,
host: url.hostname,
port: url.port,
path: url.path,
rejectunauthorized: false,
headers: res.actualsignedrequestheaders || {}
});
- 对象名和桶名都必须是url安全base64编码。encodedobject = url_safe_base64_encode(name)。例如对象名为“panda.png”, 编码过后的内容为“cgfuzgeucg5n”。base64编码后如果含有“ ”、“/”,需要分别替换为“-”、“_”。
- 如果报签名匹配错误,请检查ak/sk是否正确,以及访问的url与代码生成的签名url是否保持一致。
- 当前暂不支持带range头域的持久化。
相关文档
意见反馈
文档内容是否对您有帮助?
提交成功!非常感谢您的反馈,我们会继续努力做到更好!
您可在查看反馈及问题处理状态。
系统繁忙,请稍后重试
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨