在使用數據處理功能的批處理或觸發器功能時,每個Object都會觸發一個任務,任務中需要指定處理后的文件保存的輸出路徑,如果多個任務輸出路徑是同一個路徑,則會產生文件覆蓋,因此需要保證輸出路徑為動態路徑,所以引入變量。此外,您可以在輸出路徑中引用源文件的已有信息,如源文件所在的Bucket、文件名、文件上傳時間等信息。例如:將視頻截幀任務的輸出路徑指定為oss://test-bucket/{dirname}/{barename}_output.{autoext}
,將目標文件保存到源文件所在目錄下,目標文件名為源文件名_output
,并且根據目標文件類型自動添加后綴。
使用場景
控制臺使用場景
任務:處理任務可以在輸出路徑中引用源文件的已有信息。例如:文檔轉jpg圖片任務,輸出路徑設置為
oss://test-bucket/output/{dirname}/{barename}/{index}.{autoext}
,處理時{autoext}
將被替換為jpg
,轉換生成的圖片保存路徑為oss://test-bucket/output/源文件目錄/源文件名/圖片序號.jpg
。批處理:批處理創建成功后會對每個存量文件生成對應的任務進行數據處理,為避免批處理任務導致的數據覆蓋,建議您在批處理的輸出路徑中設置變量。例如:視頻截幀批處理將視頻截幀為png格式,輸出路徑設置為
oss://test-bucket/output/{dirname}/{barename}/{index}.{autoext}
,處理時{autoext}
將被替換為png
,處理后生成的png圖片保存路徑為oss://test-bucket/output/源文件目錄/源文件名/圖片序號.png
。觸發器:觸發器創建成功后會對每個新增文件生成對應的任務進行數據處理,如果有多個文件觸發任務可能會產生文件覆蓋,此時您需要在觸發器的輸出路徑中設置變量。例如:文檔轉換觸發器將文檔轉換為jpg圖片格式,將輸出路徑設置為
oss://test-bucket/output/{dirname}/{barename}/{index}.{autoext}
,處理時{autoext}
將被替換為jpg
,處理后生成的jpg圖片文件保存路徑為oss://test-bucket/output/源文件目錄/源文件名/圖片序號.jpg
。
API使用場景
另存為 (
sys/saveas
):另存為 (sys/saveas) 中的b(Bucket)和o(Object)參數支持變量。例如:您在對example.docx
文檔進行文檔轉換處理時,需要將1~10頁分別轉換為png格式,可以將sys/saveas
設置為b_e2J1Y2tldH0,o_ZG9jX2ltYWdlcy97aW5kZXh9LnBuZw
(e2J1Y2tldH0是{bucket}進行Base64編碼之后的值,ZG9jX2ltYWdlcy97aW5kZXh9LnBuZw是doc_images/{index}.png編碼之后的值),則轉換后生成的圖片保存到源文件相同的Bucket下,路徑為doc_images/下標.png
。任務:任務的輸出路徑支持變量。例如:您在調用CreateOfficeConversionTask - 創建文檔轉換任務接口創建文檔轉換任務時,TargetURI參數必須填寫包含擴展名的完整輸出文件路徑,TargetURI使用變量(例如:
oss://test-bucket/output/{dirname}/{barename}/{index}.jpg
)。
注意事項
批處理和觸發器的輸出路徑以非
/
結尾時,文件名需要至少包含一個變量,否則多個輸出文件將會互相覆蓋。任務的輸出路徑不支持以
/
結尾的路徑,支持使用變量。
文件元數據相關變量
以源文件oss://test-bucket/path1/path2/name.png
為例,該文件上傳時間為2022-04-22 14:38:25
,可以使用下表中的變量。
變量 | 說明 | 示例值 |
bucket | 原始文件存儲空間(Bucket)名稱。 |
|
key | 原始文件保存在存儲空間中的資源名。 重要 使用該變量時請避免將輸出文件和輸入文件設置為相同文件,否則會覆蓋源文件或在批處理時循環觸發。 |
|
dirname | 原始文件路徑目錄。 重要 使用該變量時請避免將輸出文件和輸入文件設置為相同文件,否則會覆蓋源文件或在批處理時循環觸發。 |
|
barename | 原始文件名(不包含擴展名)。 重要 使用該變量時請避免將輸出文件和輸入文件設置為相同文件,否則會覆蓋源文件或在批處理時循環觸發。 |
|
basename | 原始文件名(包含擴展名)。 重要 使用該變量時請避免將輸出文件和輸入文件設置為相同文件,否則會覆蓋源文件或在批處理時循環觸發。 |
|
ext | 原始文件資源的擴展名,通過自動檢測的 |
|
year | 原始文件上傳時的年份,格式為yyyy。 |
|
mon | 原始文件上傳時的月份,格式為mm。 |
|
day | 原始文件上傳時的日期,格式為dd。 |
|
hour | 原始文件上傳時的小時,格式為HH。 |
|
min | 原始文件上傳時的分鐘,格式為MM。 |
|
sec | 原始文件上傳時的秒鐘,格式為SS。 |
|
任務相關變量
同步處理和異步處理請求的時間點也可以作為變量,例如您在2022-09-01T02:06:57.798Z時刻提交的處理請求,可以使用下表中的變量。
變量 | 說明 | 示例值 |
t_year | 處理請求提交時的年份,格式為yyyy。 |
|
t_mon | 處理請求提交時的月份,格式為mm。 |
|
t_day | 處理請求提交時的日期,格式為dd。 |
|
t_hour | 處理請求提交時的小時,格式為HH。 |
|
t_min | 處理請求提交時的分鐘,格式為MM。 |
|
t_sec | 處理請求提交時的秒鐘,格式為SS。 |
|
文檔轉換相關變量
文檔轉換處理可以使用頁碼、Sheet名稱等作為變量,例如將含有一個Sheet,Sheet名稱為sheet1的Excel文檔轉換為JPG圖片,可以使用下表中的變量。
變量 | 說明 | 示例值 |
autoext | 文檔轉換中輸出文件的后綴。 |
|
index | 輸出下標,從1開始,Word、PDF、PPT為頁碼,Excel中為sheetindex_sheetsubindex。 |
|
sheetname | Excel的Sheet名稱。 |
|
sheetindex | Excel的Sheet下標,從1開始。 |
|
sheetsubindex | Excel的Sheet其中部分下標,從1開始。 |
|
媒體處理相關變量
媒體處理可以使用容器擴展名、分辨率等作為變量。例如,對video.mp4進行分片轉碼,媒體容器為ts,目標分辨率為1920x1080,可以使用下表中的變量。
變量 | 說明 | 示例值 |
autoext | 媒體處理中輸出文件的后綴。 |
|
index | 輸出文件下標,從0開始遞增,用于分片轉碼、截圖等多輸出場景。 |
|
streamindex | 音視頻流ID,音視頻流分別從0遞增。 |
|
resolution | 設置的轉碼分辨率,僅視頻轉碼可用。 |
|
使用REST API
如果您的程序自定義要求較高,您可以直接發起REST API請求。直接發起REST API請求需要手動編寫代碼計算簽名。
您可以在PostObject接口中以添加處理參數或樣式參數的方式來處理文件。更多信息,請參見另存為。
示例一:文檔格式轉換
如下REST API示例在PostObject接口中以添加處理參數的方式對example.docx進行文檔格式轉換處理,在另存為 (sys/saveas) 中的b(Bucket)和o(Object)參數使用變量。
pages_MS0xMA:轉換文檔1-10頁(MS0xMA是1-10進行Base64編碼之后的值)。
target_png:將文檔轉換成png圖片格式。
source_docx:指定源文件類型為docx。
sys/saveas:另存為。
b_e2J1Y2tldH0:轉碼完成后將得到的圖片使用{bucket}變量保存到源Bucket(e2J1Y2tldH0是{bucket}進行Base64編碼后的值)。
o_ZG9jX2ltYWdlcy97aW5kZXh9LnBuZw:object使用{index}變量以example.docx頁碼作為圖片文件名保存到doc_images目錄下(ZG9jX2ltYWdlcy97aW5kZXh9LnBuZw是doc_images/{index}.png進行Base64編碼之后的值)。
POST /exmaple.docx?x-oss-async-process HTTP/1.1
Host: doc-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS qn6q**************:77Dv****************
// 將文件example.docx的1-10頁轉換為PNG格式的圖片文件,轉換后的存儲路徑為:oss://源Bucket/doc_images/頁碼.png。
x-oss-async-process=doc/convert,pages_MS0xMA,target_png,source_docx|sys/saveas,b_e2J1Y2tldH0,o_ZG9jX2ltYWdlcy97aW5kZXh9LnBuZw
示例二:視頻轉碼
如下以視頻轉碼處理場景為,對example.avi文件進行視頻轉碼處理,配置了多個處理參數。
f_mp4:轉碼輸出媒體文件容器為MP4。
vcodec_h265:視頻流格式為H.265。
s_1920x1080:分辨率為1920x1080。
vb_2000000:視頻碼率為2 Mbps。
fps_30:視頻幀率為30 fps。
acodec_aac:音頻編碼格式為AAC。
ab_100000:音頻碼率為100 Kbps。
sn_1:禁用字幕流。
sys/saveas 另存為。
b_e2J1Y2tldH0:轉碼完成后將得到的文件使用{bucket}變量保存到源Bucket(e2J1Y2tldH0是{bucket}進行Base64編碼后的值)。
o_b3V0cHV0LnthdXRvZXh0fQ:object使用{autoext}變量自動添加后綴,保存后的object為output.mp4(b3V0cHV0LnthdXRvZXh0fQ是output.{autoext}進行Base64編碼后的值)。
POST /exmaple.avi?x-oss-async-process HTTP/1.1
Host: video-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS qn6q**************:77Dv****************
x-oss-async-process=video/convert,f_mp4,vcodec_h265,s_1920x1080,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1|sys/saveas,b_e2J1Y2tldH0,o_b3V0cHV0LnthdXRvZXh0fQ