日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

基于OSS原生SDK上傳

在服務端上傳場景下,當推薦的上傳方式(如上傳SDK)無法滿足業(yè)務需求時,您還可以基于OSS原生SDK上傳媒體。本文提供基于OSS原生SDK上傳媒體的流程指引、操作步驟和代碼示例。

使用場景

視頻點播面向開發(fā)者提供了豐富的上傳方式,其中上傳SDK(分服務端和客戶端)封裝了上傳相關的基礎邏輯,僅需簡單配置即可實現(xiàn)上傳功能,推薦使用。但是服務端上傳SDK僅支持Java、Python、 C/C++和PHP四種語言。如果有超出上述語言范圍的開發(fā)需求(如使用.NET語言、Go語言),可以直接基于OSS原生SDK上傳。更多上傳方式的介紹請參見媒體上傳概述

不同服務端語言支持的上傳方式和推薦的上傳方式如下表所示:

開發(fā)語言

支持的上傳方式

推薦的上傳方式

備注

Java

點播服務端上傳SDK

OSS原生SDK

說明

本文提供上傳示例代碼。

點播服務端上傳SDK

請參見上傳SDK(服務端)

Python

點播服務端上傳SDK

OSS原生SDK

點播服務端上傳SDK

C/C++

點播服務端上傳SDK

OSS原生SDK

點播服務端上傳SDK

PHP

點播服務端上傳SDK

OSS原生SDK

說明

本文提供上傳示例代碼。

點播服務端上傳SDK

Go

OSS原生SDK

說明

本文提供上傳示例代碼。

-

需集成點播服務端SDK獲取長傳地址和憑證。

本文提供上傳示例代碼。

.NET

OSS原生SDK

說明

本文提供上傳示例代碼。

-

Node.js

OSS原生SDK

-

需集成點播服務端SDK獲取長傳地址和憑證。

暫無完整的上傳示例代碼,僅提供操作參考。

上傳流程

基于OSS原生SDK上傳需要開發(fā)者自行實現(xiàn)所有上傳邏輯,包括在點播服務獲取上傳地址和憑證、Base64解碼上傳地址和憑證以及調用OSS能力完成上傳。

以集成點播服務端SDK獲取上傳地址和憑證為例,完整的上傳流程如下圖所示:

上傳流程

流程詳解

  1. 上傳應用服務器使用RAM用戶AK方式(AccessKey ID和AccessKey Secret)或STS臨時AK初始化點播客戶端。

  2. 上傳應用服務器使用點播服務端SDK調用上傳地址和憑證相關接口獲取上傳地址、上傳憑證及媒資信息。

    說明

    您也可以構造HTTP/HTTPS請求獲取上傳地址和憑證,但需要自行構造簽名,出錯概率較高。上傳地址和憑證相關接口包括:

  3. 點播服務在請求結果中返回Base64加密的上傳地址(UploadAddress)、上傳憑證(UploadAuth)、和媒體ID等信息。上傳應用服務器可根據返回結果解析參數作為初始化OSS原生SDK的入參。

    說明

    關于解析后的上傳地址和憑證說明請參見參考信息:解析上傳地址和憑證說明

    點播服務在下發(fā)上傳地址和憑證時還會自動創(chuàng)建媒資信息,即媒體ID(MediaId),用于媒資生命周期管理或媒體處理。

    • 獲取視頻上傳地址和憑證返回的VideoId即媒體ID。

    • 獲取圖片上傳地址和憑證返回的ImageId即媒體ID。

    • 獲取輔助媒資上傳地址和憑證返回的MediaId即媒體ID。

    • 請妥善保存媒體ID,作為媒資管理、音視頻播放、媒體處理等的輸入。

  4. 上傳應用服務器使用解析后的上傳地址(UploadAddress)和上傳憑證(UploadAuth),通過STS方式初始化OSS客戶端。

    重要

    為避免AK信息泄露帶來的安全風險,初始化OSS SDK必須使用STS方式

  5. 上傳應用服務器使用OSS SDK調用OSS上傳相關接口將媒體文件上傳至指定的存儲地址。

  6. OSS服務返回上傳結果。

    說明

    上傳結果也可以通過提前配置回調接收上傳相關事件來監(jiān)聽。

前提條件

  • 您已經開通了視頻點播服務。開通步驟請參見開通視頻點播服務

  • 您已經完成上傳相關的系統(tǒng)配置,包括啟用目標存儲地域的存儲地址和配置回調。操作指引請參見管理存儲Bucket回調設置

  • 您已準備好用于調用點播服務的賬號。為避免阿里云賬號AccessKey泄露帶來的安全風險,推薦您創(chuàng)建RAM用戶并授予其VOD相關權限。然后使用RAM用戶的AK對(AccessKey ID和AccessKey Secret)訪問點播服務。操作指引請參見創(chuàng)建RAM用戶并授權

  • 已配置環(huán)境變量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET。具體操作,請參見在Linux、macOS和Windows系統(tǒng)配置環(huán)境變量

    重要
    • 阿里云賬號的AccessKey擁有所有API的訪問權限,建議您使用RAM用戶的AccessKey進行API訪問或日常運維。

    • 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。

  • (可選)如需使用STS臨時授權方式(阿里云Security Token Service)訪問點播服務,請為RAM用戶創(chuàng)建角色并授予角色VOD相關權限。操作指引請參見使用STS臨時授權方案上傳視頻

    說明

    STS臨時授權方式的適用場景請參見憑證方式與STS方式對比

操作步驟

視頻點播目前提供PHP、Go、Java和.NET語言的詳細操作指引和示例代碼。

重要

真實業(yè)務場景下,請參考接口文檔將示例中的參數值替換為與業(yè)務場景匹配的真實值。獲取上傳地址和憑證的接口包括:

示例代碼均以上傳音視頻為例(調用點播CreateUploadVideo接口獲取上傳地址和憑證)。

Demo源碼

針對上述示例,視頻點播提供了Demo源碼供開發(fā)者參考。

語言

源碼

更多參考信息

PHP上傳Demo

PHP版上傳Demo源碼

OSS-PHP-SDK上傳文件

Go上傳Demo

GO版上傳Demo源碼

OSS-Go-SDK上傳文件

.NET上傳Demo

.NET版上傳Demo源碼

OSS-.NET-SDK上傳文件

Java上傳Demo

Java版上傳Demo源碼

OSS-Java-SDK上傳文件

PHP上傳示例

步驟一、安裝視頻點播VOD SDK

操作指引請參見PHP SDK快速入門

步驟二、安裝OSS SDK

重要

環(huán)境要求如下:

  • PHP 5.3+,可在終端執(zhí)行php -v命令查看當前的PHP版本。

  • CURL擴展,可在終端執(zhí)行php -m命令查看curl擴展是否已經安裝好。

  1. aliyun-oss-php-sdk下載最新的OSS PHP SDK的源碼。

  2. 解壓ZIP文件后添加文件夾到aliyun-php-sdk目錄下。

    以下載V.2.4.3 Source code為例,解壓后文件夾為aliyun-oss-php-sdk-2.4.3。更多關于OSS PHP SDK的安裝要求及安裝方式等信息,請參見OSS PHP SDK安裝

步驟三、上傳(示例代碼)

說明

故障排除方法

  • 如果由于SSL配置異常導致錯誤(如出現(xiàn)cURL error: SSL certificate problem), 可將HTTPS替換為HTTP后再初始化OssClient。

    $uploadAddress['Endpoint'] = str_replace("https:", "http:", $uploadAddress['Endpoint']);
  • 如果上傳憑證過期(默認3000秒),可以刷新上傳憑證再上傳。刷新憑證的示例代碼如下:

    function refresh_upload_video($vodClient, $videoId) {
        $request = new vod\RefreshUploadVideoRequest();
        $request->setVideoId($videoId);
        return $vodClient->getAcsResponse($request);
    }
<?php
//1、在代碼中引用VOD和OSS的文件。
  // 假定您的源碼文件和aliyun-php-sdk處于同一目錄。
require_once './aliyun-php-sdk/aliyun-php-sdk-core/Config.php';   
require_once './aliyun-php-sdk/aliyun-oss-php-sdk-2.4.3/autoload.php';
use vod\Request\V20170321 as vod;
use OSS\OssClient;
use OSS\Core\OssException;
//2、使用AK對方式初始化VOD客戶端。
function init_vod_client($accessKeyId, $accessKeySecret) {
  // 根據點播接入服務所在的Region填寫,例如:接入服務在上海,則填cn-shanghai
    $regionId = 'cn-shanghai';     
    $profile = DefaultProfile::getProfile($regionId, $accessKeyId, $accessKeySecret);
    return new DefaultAcsClient($profile);
}
//3、獲取上傳地址和憑證
function create_upload_video($vodClient) {
    $request = new vod\CreateUploadVideoRequest();
    $request->setTitle("視頻標題");        // 視頻標題(必填參數)
    $request->setFileName("文件名稱.mov"); // 視頻源文件名稱,必須包含擴展名(必填參數)
    $request->setDescription("視頻描述");  // 視頻源文件描述(可選)
  // CoverURL示例:http://example.alicdn.com/tps/TB1qnJ1PVXXXXXCXXXXXXXXXXXX-700-****.png
    $request->setCoverURL("<your Cover URL>"); // 自定義視頻封面(可選)
    $request->setTags("標簽1,標簽2"); // 視頻標簽,多個用逗號分隔(可選)
    return $vodClient->getAcsResponse($request);
}

//4、使用上傳憑證和地址通過STS方式初始化OSS客戶端。
function init_oss_client($uploadAuth, $uploadAddress) {
    $ossClient = new OssClient($uploadAuth['AccessKeyId'], $uploadAuth['AccessKeySecret'], $uploadAddress['Endpoint'],
        false, $uploadAuth['SecurityToken']);
  // 設置請求超時時間,單位秒,默認是5184000秒, 建議不要設置太小,如果上傳文件很大,消耗的時間會比較長
    $ossClient->setTimeout(86400*7);  
  // 設置連接超時時間,單位秒,默認是10秒
    $ossClient->setConnectTimeout(10);  
    return $ossClient;
}
//5、上傳。
function upload_local_file($ossClient, $uploadAddress, $localFile) {
    return $ossClient->uploadFile($uploadAddress['Bucket'], $uploadAddress['FileName'], $localFile);
}

// 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。
// 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
// 本示例通過從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。運行代碼示例前,請配置環(huán)境變量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');           // 您的AccessKeyId
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');   // 您的AccessKeySecret
$localFile = '/Users/aligame/Downloads/****.mp4';   // 需要上傳到VOD的本地視頻文件的完整路徑
try {
    // 初始化VOD客戶端并獲取上傳地址和憑證
    $vodClient = init_vod_client($accessKeyId, $accessKeySecret);
    $createRes = create_upload_video($vodClient);
    // 執(zhí)行成功會返回VideoId、UploadAddress和UploadAuth。Base64解碼UploadAddress和UploadAuth。
    $videoId = $createRes->VideoId;
    $uploadAddress = json_decode(base64_decode($createRes->UploadAddress), true);
    $uploadAuth = json_decode(base64_decode($createRes->UploadAuth), true);
    // 使用UploadAuth和UploadAddress初始化OSS客戶端
    $ossClient = init_oss_client($uploadAuth, $uploadAddress);
    // 上傳文件,注意是同步上傳會阻塞等待,耗時與文件大小和網絡上行帶寬有關
    $result = upload_local_file($ossClient, $uploadAddress, $localFile);
    printf("Succeed, VideoId: %s", $videoId);
} catch (Exception $e) {
    // var_dump($e);
    printf("Failed, ErrorMessage: %s", $e->getMessage());
}
                

Go上傳示例

步驟一、安裝視頻點播VOD SDK

操作指引請參見Go SDK快速入門

步驟二、安裝OSS SDK

重要

環(huán)境要求如下:

支持Go 1.7及以上版本,可到Go官網下載合適的版本安裝。

  1. 使用go getglide安裝阿里云Go SDK。

    • 使用go get安裝阿里云Go SDK。

      go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdk
      說明
      • 安裝過程中,界面不會打印提示,請耐心等待。如發(fā)生超時,請再次執(zhí)行命令。

      • 當GOPATH對應的目錄下出現(xiàn)了子目錄src/github.com/aliyun/alibaba-cloud-sdk-go/services/vod即表示SDK安裝成功。

    • 使用glide安裝阿里云Go SDK。

      glide get github.com/aliyun/alibaba-cloud-sdk-go
  2. 安裝OSS SDK。操作指引請參見OSS Go SDK安裝

步驟三、上傳(Go示例代碼)

 package main

import (
    "encoding/base64"
    "encoding/json"
    "fmt"
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
    "github.com/aliyun/alibaba-cloud-sdk-go/services/vod"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
    "os"
)

func InitVodClient(accessKeyId string, accessKeySecret string) (client *vod.Client, err error) {
    // 點播服務接入區(qū)域
    regionId := "cn-shanghai"
    // 創(chuàng)建授權對象
    credential := &credentials.AccessKeyCredential{
        accessKeyId,
        accessKeySecret,
    }
    // 自定義config
    config := sdk.NewConfig()
    config.AutoRetry = true     // 失敗是否自動重試
    config.MaxRetryTime = 3     // 最大重試次數
    config.Timeout = 3000000000 // 連接超時,單位:納秒;默認為3秒
    // 創(chuàng)建vodClient實例
    return vod.NewClientWithOptions(regionId, config, credential)
}

func MyCreateUploadVideo(client *vod.Client) (response *vod.CreateUploadVideoResponse, err error) {
    request := vod.CreateCreateUploadVideoRequest()
    request.Title = "Sample Video Title"
    request.Description = "Sample Description"
    request.FileName = "/opt/video/sample/video_file.mp4"
    //request.CateId = "-1"
    //Cover URL示例:http://example.alicdn.com/tps/TB1qnJ1PVXXXXXCXXXXXXXXXXXX-700-****.png
    request.CoverURL = "<your CoverURL>"
    request.Tags = "tag1,tag2"
    request.AcceptFormat = "JSON"
    return client.CreateUploadVideo(request)
}

func InitOssClient(uploadAuthDTO UploadAuthDTO, uploadAddressDTO UploadAddressDTO) (*oss.Client, error) {
    client, err := oss.New(uploadAddressDTO.Endpoint,
        uploadAuthDTO.AccessKeyId,
        uploadAuthDTO.AccessKeySecret,
        oss.SecurityToken(uploadAuthDTO.SecurityToken),
        oss.Timeout(86400*7, 86400*7))
    return client, err
}

func UploadLocalFile(client *oss.Client, uploadAddressDTO UploadAddressDTO, localFile string) {
    // 獲取存儲空間。
    bucket, err := client.Bucket(uploadAddressDTO.Bucket)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    // 上傳本地文件。
    err = bucket.PutObjectFromFile(uploadAddressDTO.FileName, localFile)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
}

type UploadAuthDTO struct {
    AccessKeyId     string
    AccessKeySecret string
    SecurityToken   string
}
type UploadAddressDTO struct {
    Endpoint string
    Bucket   string
    FileName string
}

func main() {
    // 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。
    // 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
    // 本示例通過從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。運行代碼示例前,請配置環(huán)境變量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    var accessKeyId string = os.Getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');          // 您的AccessKeyId
    var accessKeySecret string = os.Getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');  // 您的AccessKeySecret
    var localFile string = "/opt/video/sample/video_file.mp4"     // 需要上傳到VOD的本地視頻文件的完整路徑
    // 初始化VOD客戶端并獲取上傳地址和憑證
    var vodClient, initVodClientErr = InitVodClient(accessKeyId, accessKeySecret)
    if initVodClientErr != nil {
        fmt.Println("Error:", initVodClientErr)
        return
    }
    // 獲取上傳地址和憑證
    var response, createUploadVideoErr = MyCreateUploadVideo(vodClient)
    if createUploadVideoErr != nil {
        fmt.Println("Error:", createUploadVideoErr)
        return
    }
    // 執(zhí)行成功會返回VideoId、UploadAddress和UploadAuth
    var videoId = response.VideoId
    var uploadAuthDTO UploadAuthDTO
    var uploadAddressDTO UploadAddressDTO
    var uploadAuthDecode, _ = base64.StdEncoding.DecodeString(response.UploadAuth)
    var uploadAddressDecode, _ = base64.StdEncoding.DecodeString(response.UploadAddress)
    json.Unmarshal(uploadAuthDecode, &uploadAuthDTO)
    json.Unmarshal(uploadAddressDecode, &uploadAddressDTO)
    // 使用UploadAuth和UploadAddress初始化OSS客戶端
    var ossClient, _ = InitOssClient(uploadAuthDTO, uploadAddressDTO)
    // 上傳文件,注意是同步上傳會阻塞等待,耗時與文件大小和網絡上行帶寬有關
    UploadLocalFile(ossClient, uploadAddressDTO, localFile)
    //MultipartUploadFile(ossClient, uploadAddressDTO, localFile)
    fmt.Println("Succeed, VideoId:", videoId)
}
                

Java上傳示例

重要

環(huán)境要求如下:

  • 環(huán)境要求使用Java 1.8及以上版本。

  • 可在終端執(zhí)行java -version命令查看Java版本。

步驟一、安裝視頻點播VOD SDK

操作指引請參見Java SDK快速入門

步驟二、安裝OSS SDK

操作指引請參考OSS Java SDK安裝

步驟三、上傳(Java代碼示例)

import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.OSSClient;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoRequest;
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoResponse;
import org.apache.commons.codec.binary.Base64;

import java.io.File;

/**
 * descript
 */
public class UploadDemo {

    public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
        // 根據點播接入服務所在的Region填寫,例如:接入服務在上海,則填cn-shanghai;其他區(qū)域請參見媒體上傳概述。
        String regionId = "cn-shanghai";
        DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
        DefaultAcsClient client = new DefaultAcsClient(profile);
        return client;
    }

    public static CreateUploadVideoResponse createUploadVideo(DefaultAcsClient vodClient) throws ClientException {
        CreateUploadVideoRequest request = new CreateUploadVideoRequest();
        request.setFileName("vod_test.mp4");
        request.setTitle("this is title");
        //request.setDescription("this is desc");
        //request.setTags("tag1,tag2");
        //CoverURL示例:http://example.aliyundoc.com/test_cover_****.jpg
        //request.setCoverURL("<your CoverURL>");
        //request.setCateId(-1L);
        //request.setTemplateGroupId("");
        //request.setWorkflowId("");
        //request.setStorageLocation("");
        //request.setAppId("app-1000000");
        //設置請求超時時間
        request.setSysReadTimeout(1000);
        request.setSysConnectTimeout(1000);
        return vodClient.getAcsResponse(request);
    }

    public static OSSClient initOssClient(JSONObject uploadAuth, JSONObject uploadAddress) {
        String endpoint = uploadAddress.getString("Endpoint");
        String accessKeyId = uploadAuth.getString("AccessKeyId");
        String accessKeySecret = uploadAuth.getString("AccessKeySecret");
        String securityToken = uploadAuth.getString("SecurityToken");
        return new OSSClient(endpoint, accessKeyId, accessKeySecret, securityToken);
    }

    public static void uploadLocalFile(OSSClient ossClient, JSONObject uploadAddress, String localFile) {
        String bucketName = uploadAddress.getString("Bucket");
        String objectName = uploadAddress.getString("FileName");
        File file = new File(localFile);
        ossClient.putObject(bucketName, objectName, file);
    }

    public static void main(String[] argv) {
        // 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。
        // 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
        // 本示例通過從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。運行代碼示例前,請配置環(huán)境變量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        //您的AccessKeyId
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        //您的AccessKeySecret
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        //需要上傳到VOD的本地視頻文件的完整路徑,需要包含文件擴展名
        String localFile = "/Users/yours/Video/testVideo.flv";
        try {
            // 初始化VOD客戶端并獲取上傳地址和憑證
            DefaultAcsClient vodClient = initVodClient(accessKeyId, accessKeySecret);
            CreateUploadVideoResponse createUploadVideoResponse = createUploadVideo(vodClient);
            // 執(zhí)行成功會返回VideoId、UploadAddress和UploadAuth
            String videoId = createUploadVideoResponse.getVideoId();

            JSONObject uploadAuth = JSONObject.parseObject(decodeBase64(createUploadVideoResponse.getUploadAuth()));
            JSONObject uploadAddress = JSONObject.parseObject(decodeBase64(createUploadVideoResponse.getUploadAddress()));

            // 使用UploadAuth和UploadAddress初始化OSS客戶端
            OSSClient ossClient = initOssClient(uploadAuth, uploadAddress);
            // 上傳文件,注意是同步上傳會阻塞等待,耗時與文件大小和網絡上行帶寬有關
            uploadLocalFile(ossClient, uploadAddress, localFile);
            System.out.println("Put local file succeed, VideoId : " + videoId);
        } catch (Exception e) {
            System.out.println("Put local file fail, ErrorMessage : " + e.getLocalizedMessage());
        }
    }

    private static String decodeBase64(String data) {
        return new String(Base64.decodeBase64(data));
    }
}
                

.NET上傳示例

重要

環(huán)境要求如下:

  • .NET Framework 4.6.1及其以上版本。

  • .NET Standard 2.0及其以上版本。

步驟一、安裝視頻點播VOD SDK

操作指引請參見.NET SDK快速入門

步驟二、安裝OSS SDK并初始化

操作指引請參見OSS .NET SDK安裝

步驟三、初始化點播客戶端

public static DefaultAcsClient InitVodClient(string accessKeyId, string accessKeySecret)
{
    // 根據點播接入服務所在的Region填寫,例如:接入服務在上海,則填cn-shanghai
    string regionId = "cn-shanghai";
    IClientProfile profile = DefaultProfile.GetProfile(regionId, accessKeyId, accessKeySecret);
    return new DefaultAcsClient(profile);
}

步驟四、完成上傳

  1. 獲取上傳地址和憑證(以上傳視頻為例)。

    public static CreateUploadVideoResponse CreateUploadVideo(DefaultAcsClient vodClient)
    {
        CreateUploadVideoRequest request = new CreateUploadVideoRequest();
        request.AcceptFormat = Aliyun.Acs.Core.Http.FormatType.JSON;
        request.FileName = "vod_test.mp4";
        request.Title = "this is title";
        //request.Description = "<文件描述>";
        //request.Tags = "<標簽,多個標簽用逗號分開>";
        //CoverURL示例:http://example.aliyundoc.com/test_cover_****.jpg
        //request.CoverURL = "<視頻封面>";
        //媒體分類。登錄點播控制臺
        //request.CateId = -1;
        //轉碼模板組ID。登錄點播控制臺
        //request.TemplateGroupId = "<轉碼模板組ID>";
        //工作流ID。可登錄點播控制臺
        //request.WorkflowId = "<工作流ID>";
        //存儲地址。登錄點播控制臺
        //request.StorageLocation = "<存儲地址>";
        //AppId為固定取值。
        //request.AppId = "app-1000000";
        //設置請求超時時間
        request.SetReadTimeoutInMilliSeconds(1000);
        request.SetConnectTimeoutInMilliSeconds(1000);
        return vodClient.GetAcsResponse(request);
    }
  2. Base64解析獲取到的UploadAddress和UploadAuth。

  3. 使用上傳憑證和地址初始化OSS客戶端。

    重要
    • 需要先Base64解碼并JSON Decode再傳入。

    • 必須使用STS方式初始化OSS客戶端。

    示例代碼

    public static OssClient InitOssClient(JObject uploadAuth, JObject uploadAddress) 
    {
        string endpoint = uploadAddress.GetValue("Endpoint").ToString();
        string accessKeyId = uploadAuth.GetValue("AccessKeyId").ToString();
        string accessKeySecret = uploadAuth.GetValue("AccessKeySecret").ToString();
        string securityToken = uploadAuth.GetValue("SecurityToken").ToString();
        return new OssClient(endpoint, accessKeyId, accessKeySecret, securityToken);
    }
  4. 上傳本地文件。

    示例代碼

    public static void UploadLocalFile(OssClient ossClient, JObject uploadAddress, string localFile) 
    {
        string bucketName = uploadAddress.GetValue("Bucket").ToString();
        string objectName = uploadAddress.GetValue("FileName").ToString();
        ossClient.PutObject(bucketName, objectName, localFile);
    }
  5. (可選)如果上傳憑證過期,可刷新上傳憑證再上傳。

    示例代碼

    public static RefreshUploadVideoResponse RefreshUploadVideo(DefaultAcsClient vodClient)
    {
        RefreshUploadVideoRequest request = new RefreshUploadVideoRequest();
        request.AcceptFormat = Aliyun.Acs.Core.Http.FormatType.JSON;
        request.VideoId = "VideoId";
        //設置請求超時時間
        request.SetReadTimeoutInMilliSeconds(1000);
        request.SetConnectTimeoutInMilliSeconds(1000);
        return vodClient.GetAcsResponse(request);
    }
  6. 執(zhí)行完整流程(注意捕獲異常)。

    示例代碼

    // 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。
    // 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
    // 本示例通過從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。運行代碼示例前,請配置環(huán)境變量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    //您的AccessKeyId
    String accessKeyId = System.Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID");
    //您的AccessKeySecret
    String accessKeySecret = System.Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    //需要上傳到VOD的本地視頻文件的完整路徑,需要包含文件擴展名
    string localFile = "/Users/yours/Video/testVideo.flv";
    try {
        // 初始化VOD客戶端并獲取上傳地址和憑證
        DefaultAcsClient vodClient = InitVodClient(accessKeyId, accessKeySecret);
        CreateUploadVideoResponse createUploadVideoResponse = CreateUploadVideo(vodClient);
        // 執(zhí)行成功會返回VideoId、UploadAddress和UploadAuth
        String videoId = createUploadVideoResponse.VideoId;
        JObject uploadAuth = JObject.Parse(Base64Decode(createUploadVideoResponse.UploadAuth));
        JObject uploadAddress = JObject.Parse(Base64Decode(createUploadVideoResponse.UploadAddress));
        // 使用UploadAuth和UploadAddress初始化OSS客戶端
        OssClient ossClient = InitOssClient(uploadAuth, uploadAddress);
        // 上傳文件,注意是同步上傳會阻塞等待,耗時與文件大小和網絡上行帶寬有關
        UploadLocalFile(ossClient, uploadAddress, localFile);
        Console.WriteLine("Put local file succeed, VideoId : " + videoId);
    } 
    catch (Exception e) 
    {
        Console.WriteLine("Put local file fail, ErrorMessage : " + e.Message);
    }

更多語言操作指引

如果上傳SDK和上述上傳示例依然不能滿足業(yè)務需求,請參考下表獲取更多語言的操作參考。

說明

點播上傳SDK已覆蓋的語言以及已有完整示例的語言不再贅述。

開發(fā)語言

視頻點播VOD SDK

OSS原生SDK

Node.js

  1. VOD Node.js SDK的安裝和初始化,請參見Node.js SDK快速入門

  2. 獲取上傳地址和憑證,請參考其他語言的上傳邏輯并結合阿里云OpenAPI門戶在線調試生成SDK示例,自行實現(xiàn)。更多信息,請參見如何自動生成SDK示例

  1. OSS Node.js SDK安裝

  2. OSS Node.js SDK初始化

  3. OSS Node.js SDK上傳文件

參考信息:解析上傳地址和憑證說明

Base64解析上傳地址(UploadAddress)和上傳憑證(UploadAuth),得到OSS的上傳地址和授權信息。解析后的上傳地址和授權信息可用于初始化OSS客戶端。

說明

Base64解析為較常用的開發(fā)者功能,本文不提供具體的解析工具,僅提供解析后的參數說明。

表 1. UploadAddress解析后字段

字段

描述

Bucket

點播存儲地址。

Endpoint

點播存儲地域標識。

FileName

點播系統(tǒng)為上傳文件分配的文件名。

ObjectPrefix

當且僅當上傳文件是M3U8文件時返回。

表 2. UploadAuth解析后字段

字段

描述

AccessKeyId

上傳用戶的AccessKey ID。

AccessKeySecret

上傳用戶的AccessKey Secret。

SecurityToken

上傳授權安全令牌。

ExpireUTCTime

上傳地址和憑證過期時間,為UTC時間,格式:yyyy-MM-ddTHH:mm:ssZ。

Expiration

上傳授權過期時間,視頻為3000秒,過期需要刷新上傳憑證。

Region

上傳地域標識。

以下是上傳地址和憑證解析前后的示例:

UploadAddress及UploadAuth解析前

{
"VideoId": "1c1255e7e58d4d7487d0c1852954****",
"UploadAddress": "eyJFbmRwb2ludCI6Imh0dHBzOi8vb3NzLWNuLXNoYW5naGFpLmFsaXl1bmNzLmNvbSIsIkJ1Y2tldCI6InZvZC1zaGFuZ2hhaS1rYXNpIiwiRmlsZU5hbWUiOiJ2b2QtZjFlOGM0L3N2LzFhYmUyZDVjLTE3ZWU3Zjc3ZjA0LzFhYmUyZDVjLTE3ZWU3Zjc3ZjA0Lm1w****",
"RequestId": "2975D91A-F89F-5EBF-97D5-07028C90****",
"UploadAuth": "eyJTZWN1cml0eVRva2VuIjoiQ0FJUzhRUjFxNkZ0NUIyeWZTaklyNWZNQ3Z6NWg1aFEzWVc2VVhmVDEwNFpXUGtVaHE3Z3B6ejJJSGhFZjNWdEErOGN0LzQxbFdsVzUvWWFscklxRk1NVkhSMlVNWkFvdjgwT3ExLzdKb0hidk5ldTBic0hoWnY5OEtzbG9waThqcUhvZU96Y1lJNzN2cHpQQWdtMldFUVJySkwrY1RLOUpaZlBVL21nZ29KbWFkSTZSeFN4YVNFOGF2NWRPZ3BscnIzNFh4bTBNdTIyWUNiM25rM2FEa2RqcG1nYWpuaGt1NXk0MmRHNzRCalRoMEdZc3VnT3ZOYllPb0NwYWNWTE5wVnlXTXZYdXV0dGJmamgzU2RjekJKSStheHE3dFZENGl5VmtkeUJKRk5UN2g2YUZ1ZkkrNzhjS3hSaU5JazhHckpGcGVUeHNPQjhwdTNMbnA3cjlnNUpPdWhaTVYvWVg1dnk1ZGJBQk9LeFA4d2xTSzcvUEgzQnNMYUlMWUtuamhzZ1puc1hEQXBRWjdoYkxXUnJXeUUwVGpiVEpwZXU0a3poWlIreUtkdUN5N3BrK3AxdzExSGw0ZGV2T2x5VFFxMlF5em9sSXBzN1prOUtSeGtOeGo3SWVLZ2NieWxSZDA5bUg3K1BVYmhyYUJkWHBjR1l1aGJKQkFsaDFXMXlvdm5pWnV2Zm9Md2ljWUg0VjU1ZHMrOGFmNDhVbDJveFUyeitVYTYxOEZoMkVsWm9XckZMeXFMZ0ZJYWk0YnVldW9XcGJQWEJGK29NdHlkcEV3SFlwREhmVG1oTGYyK2pwSTg5YmxiZDRNVFl5cVBNK3BJbEV3STE1NWRCQ2czQWY0OWcvMWM2cExDc3FFMmErdUs1WGkyaHV6Tm45OVNIOGRZUTV4TTRPYTZ0aWVMSXNtUFYrU1hQYktSbWxwaUlWalV6QnhHdkoxNEJtYS9PMWlwVzkweGF5ekR0WWt4RHNXNzhqempnSUpjcHRkV1EzVzVCRDZ0cG51RFZkaXl0NUcwSUM2alN1K1pRQmI0NEk3b1hDS3p0aEY4NGxxWDkwelMwdXB6Y3R5bENTOEw1ZWJJN1o1SnlCQmIrOEJzNXppV3FXRGtKR29BQmg1Z3M3YlVOZEs2NGdVaThRM2tOdWpVZFdiZTFTb1Y1cVZJOEdmTkYvZ1g0MUNvWGlrSHhwN3FwOTBpMFBSd1h5VUc4WEVkVGUxY3RZbGEwZG9WeGhtNThOQVdoR0pEOXQxK21iWjd4ZUFkczNqT3NpSUNPb25Ib3JWYmNUb0s2VGs3cjNxejZHSlgybE54djVmWTBvUWZsSTJNQWR0cHo5WnJidnZ5eUFjYz0iLCJBY2Nlc3NLZXlJZCI6IlNUUy5OVHlBRk1qR3FqR1FTUWIzTkxUdjhpa0tFIiwiRXhwaXJlVVRDVGltZSI6IjIwMjItMDItMTFUMDk6NTc6NDNaIiwiQWNjZXNzS2V5U2VjcmV0IjoiOWZGUXQyeVJSWTZGMVBFb0hNS1dMYmFmeHlSd1BNNjFuRUhDbzZDTWlQZCIsIkV4cGlyYXRpb24iOiIzNjAwIiwiUmVnaW9uIjoiY24tc2hhbmdoYWk****"
}

UploadAddress解析后

{
"Endpoint": "https://******.aliyuncs.com",
"Bucket": "vod-shanghai-****",
"FileName": "vod-f1e8c4/sv/1abe2d5c-17ee7f77f04/1abe2d5c-17ee7f7****.mp4"
}
重要

如果上傳的是M3U8文件,UploadAddress解析后,會有ObjectPrefix字段值。示例如下:

M3U8文件UploadAddress解析后

{
"Endpoint": "https://******.aliyuncs.com",
"Bucket": "vod-shanghai-****",
"ObjectPrefix": "vod-f1e8c4/sv/4b9c68b2-17ee8156****",
"FileName": "vod-f1e8c4/sv/4b9c68b2-17ee81564e7/4b9c68b2-17ee815****.m3u8"
}

UploadAuth解析后

{
"SecurityToken": "CAIS8QR1q6Ft5B2yfSjIr5fMCvz5h5hQ3YW6UXfT104ZWPkUhq7gpzz2IHhEf3VtA+8ct/41lWlW5/YalrIqFMMVHR2UMZAov80Oq1/7JoHbvNeu0bsHhZv98Kslopi8jqHoeOzcYI73vpzPAgm2WEQRrJL+cTK9JZfPU/mggoJmadI6RxSxaSE8av5dOgplrr34Xxm0Mu22YCb3nk3aDkdjpmgajnhku5y42dG74BjTh0GYsugOvNbYOoCpacVLNpVyWMvXuuttbfjh3SdczBJI+axq7tVD4iyVkdyBJFNT7h6aFufI+78cKxRiNIk8GrJFpeTxsOB8pu3Lnp7r9g5JOuhZMV/YX5vy5dbABOKxP8wlSK7/PH3BsLaILYKnjhsgZnsXDApQZ7hbLWRrWyE0TjbTJpeu4kzhZR+yKduCy7pk+p1w11Hl4devOlyTQq2QyzolIps7Zk9KRxkNxj7IeKgcbylRd09mH7+PUbhraBdXpcGYuhbJBAlh1W1yovniZuvfoLwicYH4V55ds+8af48Ul2oxU2z+Ua618Fh2ElZoWrFLyqLgFIai4bueuoWpbPXBF+oMtydpEwHYpDHfTmhLf2+jpI89blbd4MTYyqPM+pIlEwI155dBCg3Af49g/1c6pLCsqE2a+uK5Xi2huzNn99SH8dYQ5xM4Oa6tieLIsmPV+SXPbKRmlpiIVjUzBxGvJ14Bma/O1ipW90xayzDtYkxDsW78jzjgIJcptdWQ3W5BD6tpnuDVdiyt5G0IC6jSu+ZQBb44I7oXCKzthF84lqX90zS0upzctylCS8L5ebI7Z5JyBBb+8Bs5ziWqWDkJGoABh5gs7bUNdK64gUi8Q3kNujUdWbe1SoV5qVI8GfNF/gX41CoXikHxp7qp90i0PRwXyUG8XEdTe1ctYla0doVxhm58NAWhGJD9t1+mbZ7xeAds3jOsiICOonHorVbcToK6Tk7r3qz6GJX2lNxv5fY0oQflI2MAdtpz9Zrbvvy****",
"AccessKeyId": "STS.NTyAFMjGqjGQSQb3NLTv8****",
"ExpireUTCTime": "2022-02-11T******",
"AccessKeySecret": "9fFQt2yRRY6F1PEoHMKWLbafxyRwPM61nEHCo6C****",
"Expiration": "****",
"Region": "cn-shanghai"
}