華為云cdn自定義端口
內(nèi)容分發(fā)網(wǎng)絡(luò) CDN加速服務(wù)將源站內(nèi)容就近分發(fā)至靠近用戶的 CDN加速 節(jié)點(diǎn),讓用戶快速訪問目標(biāo)內(nèi)容及資源。 CDN 加速解決了網(wǎng)絡(luò)擁塞狀況,提高訪問的響應(yīng)速度和成功率。
計費(fèi)說明 內(nèi)容分發(fā)網(wǎng)絡(luò) CDN 計費(fèi)說明 分布式緩存加速服務(wù),為客戶提供快速、安全、可靠的加速服務(wù) 購買 控制臺 文檔 計費(fèi)項 華為云CDN計費(fèi)分為兩個部分:基礎(chǔ)服務(wù)計費(fèi)(必選)+增值服務(wù)計費(fèi)(可選)。 · 基礎(chǔ)服務(wù)計費(fèi):用戶訪問CDN節(jié)點(diǎn)產(chǎn)生的流量或帶寬費(fèi)用。 · 增值服務(wù)計費(fèi):全站加速請求數(shù)。
幫助文檔 海量資源儲備 華為云邊緣安全EdgeSec服務(wù)依托于華為云CDN遍布全球節(jié)點(diǎn)網(wǎng)絡(luò)構(gòu)建,在加速內(nèi)容分發(fā)、傳輸?shù)耐瑫r,為業(yè)務(wù)安全保駕護(hù)航 超大防護(hù)帶寬 全球DDoS防護(hù)帶寬超過15 Tbps,輕松抵御各類網(wǎng)絡(luò)層、應(yīng)用層的大流量DDoS攻擊 全方位安全防護(hù) 繼承華為云在安全攻防領(lǐng)域2
Demand,簡稱VOD)為客戶提供視頻上傳、媒資管理、媒資處理、分發(fā)加速的一站式視頻點(diǎn)播媒體服務(wù) 視頻點(diǎn)播(Video on Demand,簡稱VOD)為客戶提供視頻上傳、自動化轉(zhuǎn)碼處理、媒資管理、分發(fā)加速的一站式視頻點(diǎn)播媒體服務(wù) 控制臺 文檔 價格計算器 優(yōu)質(zhì)體驗 網(wǎng)絡(luò)分發(fā)加速,秒級起播,毫秒級響應(yīng),提供快速、穩(wěn)定、流暢、全新的視頻體驗
華為云自由視角服務(wù)FVV 華為云自由視角服務(wù)FVV 華為云自由視角服務(wù)FVV(Free Viewpoint Video)依托華為云,集成多種終端拍攝方案,支持專業(yè)相機(jī)拍攝以及簡便的手機(jī)拍攝方案,快速敏捷為行業(yè)提供可自由選擇畫面角度的新穎觀看體驗。 華為云自由視角服務(wù)FVV(Free
,讓快手用戶享受高清流暢的視頻觀看體驗。 唯品會采用華為云CDN加速服務(wù)保障用戶穩(wěn)定流暢的購物體驗 華為云CDN高質(zhì)量服務(wù)助力唯品會電商大促,確保唯品會網(wǎng)站服務(wù)的穩(wěn)定性、安全性,全方位保障用戶訪問體驗和購物體驗。 華為云CDN穩(wěn)定可靠的下載加速服務(wù)助力英雄游戲提升玩家游戲體驗 為
443”以外的端口,勾選“非標(biāo)準(zhǔn)端口”,在“端口”下拉列表中選擇非標(biāo)準(zhǔn)端口。 2)“對外協(xié)議”選擇“HTTPS”時,需要選擇證書或者導(dǎo)入新證書,證書轉(zhuǎn)換請參見導(dǎo)入新證書。 3)如果WAF前已使用如CDN、云加速等提供七層Web代理的產(chǎn)品,為了保障WAF的安全策略能夠針對真實(shí)源IP生效,“代理”請務(wù)必選擇“是”。
功能詳情 內(nèi)容分發(fā)網(wǎng)絡(luò) CDN 功能詳情 分布式緩存加速服務(wù),為客戶提供快速、安全、可靠的加速服務(wù) 購買 控制臺 文檔 管理加速域名 域名添加完成后,您可以在CDN控制臺對接入CDN的加速域名進(jìn)行啟用、停用、移除、重新審核加速域名的操作,并且支持配置域名下線策略。 支持區(qū)域:全部
跨云高可靠,大幅節(jié)省您的業(yè)務(wù)成本 多云多區(qū)域互通 跨賬號共享專線 覆蓋海量網(wǎng)絡(luò)互聯(lián)場景,打造企業(yè)級互聯(lián)網(wǎng)絡(luò) 覆蓋海量網(wǎng)絡(luò)互聯(lián)場景,打造企業(yè)級互聯(lián)網(wǎng)絡(luò) 云上多VPC接入 一鍵管理云上VPC 云下專線、VPN接入 多條鏈路主備、負(fù)載 跨云跨賬號接入 企業(yè)路由器支持自有專線接入,支持跨賬號共享實(shí)例 云上多VPC接入
一鍵部署的解決方案實(shí)踐 一鍵部署的解決方案實(shí)踐 CDN下載加速 有效加速實(shí)現(xiàn)靜態(tài)資源訪問和下載加速 了解詳情 全球數(shù)據(jù)傳輸加速 有效提升動態(tài)頁面的加載速度和訪問成功率 了解詳情 CDN日志定時轉(zhuǎn)儲 定數(shù)轉(zhuǎn)儲CDN服務(wù)產(chǎn)生的日志到指定對象存儲桶中 了解詳情 CDN下載加速 有效加速實(shí)現(xiàn)靜態(tài)資源訪問和下載加速
CDN 許可證,即內(nèi)容分發(fā)網(wǎng)絡(luò)業(yè)務(wù)經(jīng)營許可證,是增值電信業(yè)務(wù)經(jīng)營許可證的一種。CDN許可證-內(nèi)容分發(fā)網(wǎng)絡(luò)業(yè)務(wù)內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)業(yè)務(wù)是第一類增值電信業(yè)務(wù)(B12類)。 內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)業(yè)務(wù)是指利用分布在不同區(qū)域的節(jié)點(diǎn)服務(wù)器群組成流量分配管理網(wǎng)絡(luò)平臺,為用戶提供內(nèi)容的分散存
作。有效期限:5年內(nèi)容分發(fā)網(wǎng)絡(luò)業(yè)務(wù),是指利用分布在不同區(qū)域的節(jié)點(diǎn)服務(wù)器群組成流量分配管理網(wǎng)絡(luò)平臺,為用戶提供內(nèi)容的分散存儲和高速緩存,并根據(jù)網(wǎng)絡(luò)動態(tài)流量和負(fù)載狀況,將內(nèi)容分發(fā)到快速、穩(wěn)定的緩存服務(wù)器上,提高用戶內(nèi)容的訪問響應(yīng)速度和服務(wù)的可用性服務(wù)。 一、CDN許可證的申請條件 1
CDN經(jīng)營許可證是第一類增資電信業(yè)務(wù)經(jīng)營許可證,經(jīng)營業(yè)務(wù)為內(nèi)容分發(fā)網(wǎng)絡(luò)業(yè)務(wù)。 無任何隱形消費(fèi),一站式省心服務(wù),不下證全額退款
加速樂是知道創(chuàng)宇云安全SCDN服務(wù),提供低成本、高可用的網(wǎng)絡(luò)分發(fā)服務(wù),根據(jù)用戶訪問情況智能分配節(jié)點(diǎn),大大提高用戶訪問網(wǎng)站的速度,解決因地域、帶寬和服務(wù)器性能造成的訪問瓶頸。如需了解產(chǎn)品具體情況,可以致電客服網(wǎng)站加速樂SCDN(安全內(nèi)容分發(fā)服務(wù))知道創(chuàng)宇云防御SCDN(Secure Content
內(nèi)容分發(fā)網(wǎng)絡(luò)業(yè)務(wù)是指利用分布在不同區(qū)域的節(jié)點(diǎn)服務(wù)器群組成流量分配管理網(wǎng)絡(luò)平臺,為用戶提供內(nèi)容的分散存儲和高速緩存,并根據(jù)網(wǎng)絡(luò)動態(tài)流量和負(fù)載狀況,將內(nèi)容分發(fā)到快速、穩(wěn)定的緩存服務(wù)器上,提高用戶內(nèi)容的訪問響應(yīng)速度和服務(wù)的可用性服務(wù)。 1、全名:第二類增資電信業(yè)務(wù)經(jīng)營許可證--內(nèi)容分發(fā)
華海CDN服務(wù)適用于網(wǎng)頁加速、下載加速、直播點(diǎn)播加速、全站加速等多種場景,讓優(yōu)質(zhì)內(nèi)容快速傳遞至用戶,構(gòu)建極致的用戶體驗。通過CDN云平臺為企業(yè)提供一站式查詢CDN服務(wù)總覽數(shù)據(jù),包括流量、帶寬、域名等信息,及時掌握業(yè)務(wù)運(yùn)營情況。華海CDN云平臺是一款高效、穩(wěn)定、安全的內(nèi)容分發(fā)網(wǎng)絡(luò)管理
括彩云是國內(nèi)專注融合CDN平臺研發(fā)和智能調(diào)度的云廠商,聚合各大云廠商資源能力的調(diào)度形成各行業(yè)的解決方案,通過自主研發(fā)平臺進(jìn)行全方位節(jié)點(diǎn)質(zhì)量監(jiān)控,以及智能易用的節(jié)點(diǎn)調(diào)度能力實(shí)現(xiàn)秒級切換。CDN管理系統(tǒng),官方一對一售后群,云智能調(diào)度,智能融合CDN
SCDN,網(wǎng)站加速的同時兼具防御功能,抗ddos無視CC攻擊。超低價劃算套裝,一步到位超低價拿下waf+高防+cdn。 國內(nèi)國外均可,72小時無條件退款,超低價一步到位,SCDN=WAF+高防+CDN
CDN許可證,是第一類增值電信業(yè)務(wù),利用分布在不同區(qū)域服務(wù)器群組成流量分配管理網(wǎng)絡(luò)平臺,提高用戶訪問速度的服務(wù)。 CDN許可證辦理 增值電信業(yè)務(wù) 提高響應(yīng)速度
傳 什么是CDN_CDN平臺_CDN價格一般多少 免費(fèi)CDN_CDN技術(shù)_CDN網(wǎng)絡(luò) 什么是CDN_CDN的計費(fèi)模式_開通CDN的流程 華為云CDN有哪些優(yōu)勢_CDN動態(tài)_CDN應(yīng)用場景1 CDN是什么意思_CDN域名配置_CDN基本概念 CDN價格_CDN加速_CDN應(yīng)用場景
。ModelArts提供自定義鏡像功能支持用戶自定義運(yùn)行引擎。 了解更多 自定義鏡像簡介 應(yīng)用場景 Notebook中使用自定義鏡像 當(dāng)Notebook預(yù)置鏡像不能滿足需求時,用戶可以制作自定義鏡像。在鏡像中自行安裝與配置環(huán)境依賴軟件及信息,并制作為自定義鏡像,用于創(chuàng)建新的Notebook實(shí)例。
CDN內(nèi)容分發(fā)網(wǎng)絡(luò)_CDN安全加速_CDN套餐包 CDN 分發(fā)網(wǎng)絡(luò)_CDN加速服務(wù)器多少錢_開通CDN 內(nèi)容分發(fā)網(wǎng)絡(luò)CDN購買_便宜的CDN_華為云CDN價格 國內(nèi)CDN網(wǎng)站加速_華為的CDN全站加速_專業(yè)CDN加速 高防CDN加速_CDN功能_CDN應(yīng)用 CDN是什么意思_CDN價格_CDN網(wǎng)絡(luò)架構(gòu)
當(dāng)用戶需要更新OBS中存儲的數(shù)據(jù)時,CDN中緩存的過時數(shù)據(jù)也需要進(jìn)行更新,可以使用CDN自動刷新功能來自動通知CDN去更新數(shù)據(jù)。 當(dāng)用戶需要更新OBS中存儲的數(shù)據(jù)時,CDN中緩存的過時數(shù)據(jù)也需要進(jìn)行更新,可以使用CDN自動刷新功能來自動通知CDN去更新數(shù)據(jù)。 了解詳情 自定義域名相關(guān)文檔 自定義域名 查看文檔
GaussDB費(fèi)用_GaussDB軟件多少錢_高斯數(shù)據(jù)庫費(fèi)用_華為云 GaussDB執(zhí)行計劃_SQL執(zhí)行計劃_高斯數(shù)據(jù)庫執(zhí)行計劃-華為云 GaussDB是什么線程_GaussDB線程池_高斯數(shù)據(jù)庫是什么線程-華為云 GaussDB如何建主鍵_數(shù)據(jù)庫索引設(shè)計規(guī)范_高斯數(shù)據(jù)庫如何建主鍵-華為云 數(shù)據(jù)庫登錄入口_華為GaussDB分布式數(shù)據(jù)庫免費(fèi)領(lǐng)取
CDN價格_CDN加速_CDN應(yīng)用場景 更專業(yè)的CDN_CDN的功能_CDN的使用場景 華為云CDN的優(yōu)勢_CDN計費(fèi)方式_CDN續(xù)費(fèi) CDN入門_CDN的功能_快速接入CDN_華為云 什么是CDN_CDN的工作原理_CDN應(yīng)用場景_華為云 CDN下載_免費(fèi)CDN加速_CDN加速器
什么是CDN_CDN平臺_CDN價格一般多少 免費(fèi)CDN_CDN技術(shù)_CDN網(wǎng)絡(luò) 高防CDN網(wǎng)站_高新技術(shù)CDN服務(wù)器_華為云CDN網(wǎng)站加速 什么是CDN_CDN的計費(fèi)模式_開通CDN的流程 華為云CDN有哪些優(yōu)勢_CDN動態(tài)_CDN應(yīng)用場景1 CDN是什么意思_CDN域名配置_CDN基本概念
CDN是什么意思_CDN價格_CDN網(wǎng)絡(luò)架構(gòu) CDN網(wǎng)絡(luò)_免費(fèi)國外CDN_CDN加速免費(fèi) CDN_內(nèi)容分發(fā)網(wǎng)絡(luò)_CDN網(wǎng)站加速 CDN加速怎么用_CDN加速場景_免費(fèi)CDN加速 CDN加速_CND服務(wù)_CDN內(nèi)容分發(fā) CDN 內(nèi)容分發(fā)網(wǎng)絡(luò) _CDN內(nèi)容加速_CDN服務(wù) CDN加速服務(wù)是什么_CDN加速類型_CDN節(jié)點(diǎn)加速
CDN內(nèi)容分發(fā)網(wǎng)絡(luò) CDN內(nèi)容分發(fā)網(wǎng)絡(luò) CDN(Content Delivery Network,內(nèi)容分發(fā)網(wǎng)絡(luò))是構(gòu)建在現(xiàn)有互聯(lián)網(wǎng)基礎(chǔ)之上的一層智能虛擬網(wǎng)絡(luò),通過在網(wǎng)絡(luò)各處部署節(jié)點(diǎn)服務(wù)器,實(shí)現(xiàn)將源站內(nèi)容分發(fā)至所有CDN節(jié)點(diǎn),使用戶可以就近獲得所需的內(nèi)容。CDN服務(wù)縮短了用戶查看內(nèi)
華為云cdn自定義端口
使用自定義域名訪問服務(wù)端之前,需要先在console界面配置自定義域名。
自定義域名訪問介紹與配置
當(dāng)以自定義域名訪問 OBS 桶時,需要先將該自定義域名同對應(yīng)OBS桶訪問域名進(jìn)行綁定自定義域名綁定簡介,自定義域名綁定配置。
當(dāng)在自定義域名上配置了CDN加速服務(wù),即自定義域名為CDN服務(wù)的加速域名時,需要額外對CDN服務(wù)進(jìn)行配置,以保證可以正常使用自定義域名訪問OBS服務(wù)。
以華為云CDN服務(wù)為例,相關(guān)配置如下所示:
- 登錄華為云CDN服務(wù),從CDN服務(wù)左側(cè)列表中選擇域名管理項,在該項中可以查看到所有配置的CDN服務(wù)域名信息。
- 配置源站。單擊要使用的自定義域名項,進(jìn)入域名配置界面,編輯源站配置,選擇主源站類型為源站域名類型,對應(yīng)源站為要訪問的OBS桶域名。

- 配置回源HOST。回源HOST必須指定為加速域名即訪問OBS服務(wù)時訪問的自定義域名,否則可能會出現(xiàn)回源鑒權(quán)失敗的問題。

通過SDK,使用自定義域名訪問OBS,可以完全復(fù)用對應(yīng)接口的示例,只需要注意在設(shè)置option的時候,按如下方式設(shè)置:
option.bucket_options.useCname = true;option.bucket_options.host_name = "yourCustomDomain";
代碼示例一:通過自定義域名上傳對象
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
#include "eSDKOBS.h"#include <stdio.h>#include <sys/stat.h>// 響應(yīng)回調(diào)函數(shù),可以在這個回調(diào)中把properties的內(nèi)容記錄到callback_data(用戶自定義回調(diào)數(shù)據(jù))中obs_status response_properties_callback(const obs_response_properties *properties, void *callback_data);int put_file_data_callback(int buffer_size, char *buffer, void *callback_data);void put_file_complete_callback(obs_status status, const obs_error_details *error, void *callback_data);typedef struct put_file_object_callback_data{ FILE *infile; uint64_t content_length; obs_status ret_status;} put_file_object_callback_data;uint64_t open_file_and_get_length(char *localfile, put_file_object_callback_data *data);int main(){ // 以下示例展示如何在使用自定義域名時通過put_object函數(shù)上傳本地文件:: // 在程序入口調(diào)用obs_initialize方法來初始化網(wǎng)絡(luò)、內(nèi)存等全局資源。 obs_initialize(OBS_INIT_ALL); obs_options options; // 創(chuàng)建并初始化options,該參數(shù)包括訪問域名(host_name)、訪問密鑰(access_key_id和acces_key_secret)、桶名(bucket_name)、桶存儲類別(storage_class)等配置信息 init_obs_options(&options); // host_name填寫桶所在的endpoint, 此處以華北-北京四為例,其他地區(qū)請按實(shí)際情況填寫。 options.bucket_options.host_name = "obs.cn-north-4.myhuaweicloud.com"; // 認(rèn)證用的ak和sk硬編碼到代碼中或者明文存儲都有很大的安全風(fēng)險,建議在配置文件或者環(huán)境變量中密文存放,使用時解密,確保安全; // 本示例以ak和sk保存在環(huán)境變量中為例,運(yùn)行本示例前請先在本地環(huán)境中設(shè)置環(huán)境變量A CCE SS_KEY_ID和SECRET_AC CES S_KEY。 options.bucket_options.access_key = getenv("ACCESS_KEY_ID"); options.bucket_options.secret_access_key = getenv("SECRET_ACCESS_KEY"); char * bucketName = ""; options.bucket_options.bucket_name = bucketName; // 設(shè)置自定義域名 options.bucket_options.useCname = true; options.bucket_options.host_name = "example.obs.test.cname.com"; // 初始化上傳對象屬性 obs_put_properties put_properties; init_put_properties(&put_properties); // 上傳對象名 char *key = "example_get_file_test"; // 上傳的文件 char file_name[256] = "./example_local_file_test.txt"; uint64_t content_length = 0; // 初始化存儲上傳數(shù)據(jù)的結(jié)構(gòu)體 put_file_object_callback_data data; memset(&data, 0, sizeof(put_file_object_callback_data)); // 打開文件,并獲取文件長度 content_length = open_file_and_get_length(file_name, &data); // 設(shè)置回調(diào)函數(shù) obs_put_object_handler putobjectHandler = { { &response_properties_callback, &put_file_complete_callback }, &put_file_data_callback }; put_object(&options, key, content_length, &put_properties, 0, &putobjectHandler, &data); if (OBS_STATUS_OK == data.ret_status) { printf("put object from file successfully. \n"); } else { printf("put object failed(%s).\n", obs_get_status_name(data.ret_status)); } if (data.infile != NULL) { fclose(data.infile); } // 釋放分配的全局資源 obs_deinitialize();}// 響應(yīng)回調(diào)函數(shù),可以在這個回調(diào)中把properties的內(nèi)容記錄到callback_data(用戶自定義回調(diào)數(shù)據(jù))中obs_status response_properties_callback(const obs_response_properties *properties, void *callback_data){ if (properties == NULL) { printf("error! obs_response_properties is null!"); if (callback_data != NULL) { obs_sever_callback_data *data = (obs_sever_callback_data *)callback_data; printf("server_callback buf is %s, len is %llu", data->buffer, data->buffer_len); return OBS_STATUS_OK; } else { printf("error! obs_sever_callback_data is null!"); return OBS_STATUS_OK; } } // 打印響應(yīng)信息#define print_nonnull(name, field) \ do { \ if (properties-> field) { \ printf("%s: %s\n", name, properties->field); \ } \ } while (0) print_nonnull("request_id", request_id); print_nonnull("request_id2", request_id2); print_nonnull("content_type", content_type); if (properties->content_length) { printf("content_length: %llu\n", properties->content_length); } print_nonnull("server", server); print_nonnull("ETag", etag); print_nonnull("expiration", expiration); print_nonnull("website_redirect_location", website_redirect_location); print_nonnull("version_id", version_id); print_nonnull("allow_origin", allow_origin); print_nonnull("allow_headers", allow_headers); print_nonnull("max_age", max_age); print_nonnull("allow_methods", allow_methods); print_nonnull("expose_headers", expose_headers); print_nonnull("storage_class", storage_class); print_nonnull("server_side_encryption", server_side_encryption); print_nonnull("kms_key_id", kms_key_id); print_nonnull("customer_algorithm", customer_algorithm); print_nonnull("customer_key_md5", customer_key_md5); print_nonnull("bucket_location", bucket_location); print_nonnull("obs_version", obs_version); print_nonnull("restore", restore); print_nonnull("obs_object_type", obs_object_type); print_nonnull("obs_next_append_position", obs_next_append_position); print_nonnull("obs_head_epid", obs_head_epid); print_nonnull("reserved_indicator", reserved_indicator); int i; for (i = 0; i < properties->meta_data_count; i++) { printf("x-obs-meta-%s: %s\n", properties->meta_data[i].name, properties->meta_data[i].value); } return OBS_STATUS_OK;}int put_file_data_callback(int buffer_size, char *buffer, void *callback_data){ put_file_object_callback_data *data = (put_file_object_callback_data *)callback_data; int ret = 0; if (data->content_length) { int toRead = ((data->content_length > (unsigned)buffer_size) ? (unsigned)buffer_size : data->content_length); ret = fread(buffer, 1, toRead, data->infile); } uint64_t originalContentLength = data->content_length; data->content_length -= ret; if (data->content_length) { printf("%llu bytes remaining ", (unsigned long long)data->content_length); printf("(%d%% complete) ...\n", (int)(((originalContentLength - data->content_length) * 100) / originalContentLength)); } return ret;}void put_file_complete_callback(obs_status status, const obs_error_details *error, void *callback_data){ put_file_object_callback_data *data = (put_file_object_callback_data *)callback_data; data->ret_status = status;}uint64_t open_file_and_get_length(char *localfile, put_file_object_callback_data *data){ uint64_t content_length = 0; const char *body = 0; if (!content_length) { struct stat statbuf; if (stat(localfile, &statbuf) == -1) { fprintf(stderr, "\nERROR: Failed to stat file %s: ", localfile); return 0; } content_length = statbuf.st_size; } if (!(data->infile = fopen(localfile, "rb"))) { fprintf(stderr, "\nERROR: Failed to open input file %s: ", localfile); return 0; } data->content_length = content_length; return content_length;} |
代碼示例二:通過自定義域名下載對象
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
#include "eSDKOBS.h"#include <stdio.h>#include <sys/stat.h>// 響應(yīng)回調(diào)函數(shù),可以在這個回調(diào)中把properties的內(nèi)容記錄到callback_data(用戶自定義回調(diào)數(shù)據(jù))中obs_status response_properties_callback(const obs_response_properties *properties, void *callback_data);obs_status get_object_data_callback(int buffer_size, const char *buffer, void *callback_data);void get_object_complete_callback(obs_status status, const obs_error_details *error, void *callback_data);typedef struct get_object_callback_data{ FILE *outfile; obs_status ret_status;}get_object_callback_data;FILE * write_to_file(char *localfile);int main(){ // 以下示例展示如何在使用自定義域名時通過get_object函數(shù)下載對象到本地文件: // 在程序入口調(diào)用obs_initialize方法來初始化網(wǎng)絡(luò)、內(nèi)存等全局資源。 obs_initialize(OBS_INIT_ALL); obs_options options; // 創(chuàng)建并初始化options,該參數(shù)包括訪問域名(host_name)、訪問密鑰(access_key_id和acces_key_secret)、桶名(bucket_name)、桶存儲類別(storage_class)等配置信息 init_obs_options(&options); // host_name填寫桶所在的endpoint, 此處以華北-北京四為例,其他地區(qū)請按實(shí)際情況填寫。 options.bucket_options.host_name = "obs.cn-north-4.myhuaweicloud.com"; // 認(rèn)證用的ak和sk硬編碼到代碼中或者明文存儲都有很大的安全風(fēng)險,建議在配置文件或者環(huán)境變量中密文存放,使用時解密,確保安全; // 本示例以ak和sk保存在環(huán)境變量中為例,運(yùn)行本示例前請先在本地環(huán)境中設(shè)置環(huán)境變量ACCESS_KEY_ID和SECRET_ACCESS_KEY。 options.bucket_options.access_key = getenv("ACCESS_KEY_ID"); options.bucket_options.secret_access_key = getenv("SECRET_ACCESS_KEY"); char * bucketName = ""; options.bucket_options.bucket_name = bucketName; // 設(shè)置自定義域名 options.bucket_options.useCname = true; options.bucket_options.host_name = "example.obs.test.cname.com"; // 設(shè)置對象下載到本地的文件名 char *file_name = "./example_get_file_test"; obs_object_info object_info; // 設(shè)置下載的對象 memset(&object_info, 0, sizeof(obs_object_info)); object_info.key = "example_get_file_test"; object_info.version_id = NULL; //根據(jù)業(yè)務(wù)需要設(shè)置存放下載對象數(shù)據(jù)的結(jié)構(gòu) get_object_callback_data data; data.ret_status = OBS_STATUS_BUTT; data.outfile = write_to_file(file_name); // 定義范圍下載參數(shù) obs_get_conditions getcondition; memset(&getcondition, 0, sizeof(obs_get_conditions)); init_get_properties(&getcondition); // 下載起始位置,默認(rèn)0,從對象0字節(jié)位置開始下載 getcondition.start_byte = 0; // 下載長度,默認(rèn)0,一直下載到對象尾 // getcondition.byte_count = 0; // 定義下載的回調(diào)函數(shù) obs_get_object_handler get_object_handler = { { &response_properties_callback, &get_object_complete_callback}, &get_object_data_callback }; get_object(&options, &object_info, &getcondition, 0, &get_object_handler, &data); if (OBS_STATUS_OK == data.ret_status) { printf("get object successfully. \n"); } else { printf("get object failed(%s).\n", obs_get_status_name(data.ret_status)); } fclose(data.outfile); // 釋放分配的全局資源 obs_deinitialize();}// 響應(yīng)回調(diào)函數(shù),可以在這個回調(diào)中把properties的內(nèi)容記錄到callback_data(用戶自定義回調(diào)數(shù)據(jù))中obs_status response_properties_callback(const obs_response_properties *properties, void *callback_data){ if (properties == NULL) { printf("error! obs_response_properties is null!"); if (callback_data != NULL) { obs_sever_callback_data *data = (obs_sever_callback_data *)callback_data; printf("server_callback buf is %s, len is %llu", data->buffer, data->buffer_len); return OBS_STATUS_OK; } else { printf("error! obs_sever_callback_data is null!"); return OBS_STATUS_OK; } } // 打印響應(yīng)信息#define print_nonnull(name, field) \ do { \ if (properties-> field) { \ printf("%s: %s\n", name, properties->field); \ } \ } while (0) print_nonnull("request_id", request_id); print_nonnull("request_id2", request_id2); print_nonnull("content_type", content_type); if (properties->content_length) { printf("content_length: %llu\n", properties->content_length); } print_nonnull("server", server); print_nonnull("ETag", etag); print_nonnull("expiration", expiration); print_nonnull("website_redirect_location", website_redirect_location); print_nonnull("version_id", version_id); print_nonnull("allow_origin", allow_origin); print_nonnull("allow_headers", allow_headers); print_nonnull("max_age", max_age); print_nonnull("allow_methods", allow_methods); print_nonnull("expose_headers", expose_headers); print_nonnull("storage_class", storage_class); print_nonnull("server_side_encryption", server_side_encryption); print_nonnull("kms_key_id", kms_key_id); print_nonnull("customer_algorithm", customer_algorithm); print_nonnull("customer_key_md5", customer_key_md5); print_nonnull("bucket_location", bucket_location); print_nonnull("obs_version", obs_version); print_nonnull("restore", restore); print_nonnull("obs_object_type", obs_object_type); print_nonnull("obs_next_append_position", obs_next_append_position); print_nonnull("obs_head_epid", obs_head_epid); print_nonnull("reserved_indicator", reserved_indicator); int i; for (i = 0; i < properties->meta_data_count; i++) { printf("x-obs-meta-%s: %s\n", properties->meta_data[i].name, properties->meta_data[i].value); } return OBS_STATUS_OK;}obs_status get_object_data_callback(int buffer_size, const char *buffer, void *callback_data){ get_object_callback_data *data = (get_object_callback_data *)callback_data; size_t wrote = fwrite(buffer, 1, buffer_size, data->outfile); return ((wrote < (size_t)buffer_size) ? OBS_STATUS_AbortedByCallback : OBS_STATUS_OK);}void get_object_complete_callback(obs_status status, const obs_error_details *error, void *callback_data){ get_object_callback_data *data = (get_object_callback_data *)callback_data; data->ret_status = status;}FILE * write_to_file(char *localfile){ FILE *outfile = 0; if (localfile) { struct stat buf; if (stat(localfile, &buf) == -1) { outfile = fopen(localfile, "wb"); } else { outfile = fopen(localfile, "a"); } if (!outfile) { fprintf(stderr, "\nERROR: Failed to open output file %s: ", localfile); return outfile; } } else { fprintf(stderr, "\nERROR: Failed to open output file, it's NULL, write object to stdout.", localfile); outfile = stdout; } return outfile;} |
華為云cdn自定義端口常見問題
更多常見問題 >>-
用戶訪問報錯時,會給客戶端返回錯誤頁面,而此時的頁面一般不美觀。華為云CDN支持自定義錯誤頁面,您可以在CDN控制臺設(shè)置自定義錯誤頁面,當(dāng)訪問頁面出錯時,會給客戶端返回指定的頁面,優(yōu)化用戶體驗。
-
預(yù)熱的任務(wù)一直在處理中的可能原因有如下幾種:可能當(dāng)前CDN處于預(yù)熱高峰期,您的預(yù)熱任務(wù)正在排隊中。緩存預(yù)熱的時候CDN要回源請求資源,會占用源站帶寬。當(dāng)您要執(zhí)行大批量文件預(yù)熱時,可能會導(dǎo)致您的源站帶寬資源被占滿,建議:預(yù)熱時請盡量分批次執(zhí)行。您可以在訪問量低的時間(如夜間)進(jìn)行預(yù)熱。升級您的源站帶寬。
-
華為云CDN(Content Delivery Network,內(nèi)容分發(fā)網(wǎng)絡(luò))是通過將源站內(nèi)容分發(fā)至靠近用戶的加速節(jié)點(diǎn),使用戶可以就近獲得所需的內(nèi)容,解決Internet網(wǎng)絡(luò)擁擠的狀況,提高用戶訪問的響應(yīng)速度和成功率,從而提升您業(yè)務(wù)的使用體驗。
-
華為云CDN平臺將源站資源緩存到遍布全球的加速節(jié)點(diǎn)上,當(dāng)終端用戶訪問資源時,無需回源,CDN通過一組預(yù)先定義好的策略(如內(nèi)容類型、地理區(qū)域、網(wǎng)絡(luò)負(fù)載狀況等),將當(dāng)時能夠最快響應(yīng)用戶的CDN節(jié)點(diǎn)IP地址提供給用戶,使用戶可以以最快的速度獲得網(wǎng)站內(nèi)容。
-
如果您采用了自定義OBS私有桶作為CDN的源站,即:跨賬號添加OBS私有桶作為源站,您需要前往OBS控制臺為您的私有桶配置策略。
-
用戶訪問報錯時,會給客戶端返回錯誤頁面,而此時的頁面一般不美觀。您可以在CDN控制臺設(shè)置自定義錯誤頁面,當(dāng)訪問頁面出錯時,會給客戶端返回指定的頁面,優(yōu)化用戶體驗。
更多相關(guān)專題
- 熱門產(chǎn)品
- 大模型即服務(wù)平臺 MaaS
- Flexus云服務(wù)
- 云服務(wù)器
- 盤古大模型
- SSL證書
- 華為云WeLink
- 實(shí)用工具
- 文字識別
- 漏洞掃描
- 華為云會議
- 云服務(wù)健康看板
增值電信業(yè)務(wù)經(jīng)營許可證:B1.B2-20200593 | 域名注冊服務(wù)機(jī)構(gòu)許可:黔D3-20230001 | 代理域名注冊服務(wù)機(jī)構(gòu):新網(wǎng)、西數(shù)