五月婷婷丁香性爱|j久久一级免费片|久久美女福利视频|中文观看在线观看|加勒比四区三区二|亚洲裸女视频网站|超碰97AV在线69网站免费观看|有码在线免费视频|久久青青日本视频|亚洲国产AAAA

[快速入門]華為云cdn自定義端口
內(nèi)容分發(fā)網(wǎng)絡(luò) CDN-計費(fèi)說明

計費(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

幫助文檔 海量資源儲備 華為云邊緣安全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

視頻點(diǎn)播VOD

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ù)

華為云自由視角服務(wù)FVV 華為云自由視角服務(wù)FVV 華為云自由視角服務(wù)FVV(Free Viewpoint Video)依托華為云,集成多種終端拍攝方案,支持專業(yè)相機(jī)拍攝以及簡便的手機(jī)拍攝方案,快速敏捷為行業(yè)提供可自由選擇畫面角度的新穎觀看體驗。 華為云自由視角服務(wù)FVV(Free

內(nèi)容分發(fā)網(wǎng)絡(luò) CDN-概覽

,讓快手用戶享受高清流暢的視頻觀看體驗。 唯品會采用華為云CDN加速服務(wù)保障用戶穩(wěn)定流暢的購物體驗 華為云CDN高質(zhì)量服務(wù)助力唯品會電商大促,確保唯品會網(wǎng)站服務(wù)的穩(wěn)定性、安全性,全方位保障用戶訪問體驗和購物體驗。 華為云CDN穩(wěn)定可靠的下載加速服務(wù)助力英雄游戲提升玩家游戲體驗 為

Web應(yīng)用防火墻 WAF產(chǎn)品入門

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-功能

功能詳情 內(nèi)容分發(fā)網(wǎng)絡(luò) CDN 功能詳情 分布式緩存加速服務(wù),為客戶提供快速、安全、可靠的加速服務(wù) 購買 控制臺 文檔 管理加速域名 域名添加完成后,您可以在CDN控制臺對接入CDN的加速域名進(jìn)行啟用、停用、移除、重新審核加速域名的操作,并且支持配置域名下線策略。 支持區(qū)域:全部

企業(yè)路由器 ER

跨云高可靠,大幅節(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接入

對象存儲服務(wù) OBS

一鍵部署的解決方案實(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)資源訪問和下載加速

[相關(guān)產(chǎn)品]華為云cdn自定義端口
cdn許可證

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)容的分散存

CDN許可證

作。有效期限: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許可證

CDN經(jīng)營許可證是第一類增資電信業(yè)務(wù)經(jīng)營許可證,經(jīng)營業(yè)務(wù)為內(nèi)容分發(fā)網(wǎng)絡(luò)業(yè)務(wù)。  無任何隱形消費(fèi),一站式省心服務(wù),不下證全額退款

網(wǎng)站SCDN加速

加速樂是知道創(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

CDN許可證委托服務(wù)

內(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管理平臺

華海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ò)管理

括彩云智能融合CDN

括彩云是國內(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

SCDN,網(wǎng)站加速的同時兼具防御功能,抗ddos無視CC攻擊。超低價劃算套裝,一步到位超低價拿下waf+高防+cdn。  國內(nèi)國外均可,72小時無條件退款,超低價一步到位,SCDN=WAF+高防+CDN

CDN許可證辦理

CDN許可證,是第一類增值電信業(yè)務(wù),利用分布在不同區(qū)域服務(wù)器群組成流量分配管理網(wǎng)絡(luò)平臺,提高用戶訪問速度的服務(wù)。 CDN許可證辦理 增值電信業(yè)務(wù) 提高響應(yīng)速度

[相似文章]華為云cdn自定義端口
內(nèi)容分發(fā)網(wǎng)絡(luò)CDN購買_便宜的CDN_華為云CDN價格

傳 什么是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自定義鏡像_自定義鏡像簡介_如何使用自定義鏡像

。ModelArts提供自定義鏡像功能支持用戶自定義運(yùn)行引擎。 了解更多 自定義鏡像簡介 應(yīng)用場景 Notebook中使用自定義鏡像 當(dāng)Notebook預(yù)置鏡像不能滿足需求時,用戶可以制作自定義鏡像。在鏡像中自行安裝與配置環(huán)境依賴軟件及信息,并制作為自定義鏡像,用于創(chuàng)建新的Notebook實(shí)例。

CDN 內(nèi)容分發(fā)網(wǎng)絡(luò) _CDN內(nèi)容加速_CDN服務(wù)

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)

OBS如何綁定自定義域名_OBS如何使用CDN加速_OBS如何使用CDN自動刷新

當(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端口_綁定和解綁彈性公網(wǎng)IP_高斯數(shù)據(jù)庫端口-華為云

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分發(fā)平臺_CDN業(yè)務(wù)_內(nèi)容分發(fā)網(wǎng)絡(luò)

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服務(wù)_CDN加速_內(nèi)容分發(fā)網(wǎng)絡(luò)

什么是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產(chǎn)品服務(wù)_CDN 內(nèi)容分發(fā)網(wǎng)絡(luò)

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安全加速_CDN套餐包

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自定義端口

開發(fā)過程中,您有任何問題可以在github上提交issue,或者在華為云 對象存儲 服務(wù)論壇中發(fā)帖求助。

使用自定義域名訪問服務(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)配置如下所示:

  1. 登錄華為云CDN服務(wù),從CDN服務(wù)左側(cè)列表中選擇域名管理項,在該項中可以查看到所有配置的CDN服務(wù)域名信息。
  2. 配置源站。單擊要使用的自定義域名項,進(jìn)入域名配置界面,編輯源站配置,選擇主源站類型為源站域名類型,對應(yīng)源站為要訪問的OBS桶域名。

  3. 配置回源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)專題