使用鸿蒙SDK上传文件

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文介绍如何使用鸿蒙 SDK将媒体文件从本地上传至点播存储。

警告

当前鸿蒙上传SDK处于公测阶段,因此不建议直接在生产环境中使用。如果您需要在生产环境中部署,请务必进行充分的测试,以确保其稳定性和兼容性。

前提条件

  • DevEco Studio版本为5.0 Release 或更高版本。

  • HarmonyOS SDK版本为API Version 12 或更高版本。

  • 支持音视频的鸿蒙设备,操作系统版本为HarmonyOS NEXT 5.0.0.102 或更高版本。

集成SDK

集成方式

ohpm包管理器集成(推荐)

在终端中进入您应用模块的目录(例如 entry 目录),并执行以下命令:

ohpm install @aliyun_video_cloud/vod-upload-sdk

或使用简写命令:

ohpm i @aliyun_video_cloud/vod-upload-sdk

此命令会自动下载 SDK 及其依赖(如 @aliyun/oss),并将其添加到您模块的 oh-package.json5 文件的dependencies 节点中。

手动方式集成

您也可以手动在您模块的 oh-package.json5 文件中添加依赖。如果您是从 ohpm 官方仓库安装,配置如下:

"dependencies": {
  "@aliyun_video_cloud/vod-upload-sdk": "^1.0.0", // 请使用最新的稳定版本
}

如果您是手动下载 HAR 包进行本地引用:

"dependencies": {
  "@aliyun_video_cloud/vod-upload-sdk": "file:path/to/your/vod-upload-sdk.har", // 替换为 HAR 包的实际路径
}

保存文件后,在项目根目录运行 ohpm install 来安装所有依赖:

ohpm install

配置权限

申请权限

在您的应用主模块的 src/main/module.json5 配置文件中,添加以下必要的权限声明:

重要

请根据应用实际使用的Ability名称替换示例中的 .EntryAbility。媒体读写权限(如 ohos.permission.READ_IMAGEohos.permission.READ_VIDEO)可根据应用支持的文件类型配置更具体的权限。

{
  "module": {
    // ... 其他配置
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET", // 应用需要联网以上传文件
        "usedScene": {
          "ability": [
            ".EntryAbility" // 替换为您的Ability名称
          ],
          "when": "inuse"
        }
      },
      {
        "name": "ohos.permission.READ_MEDIA", // 应用需要读取本地媒体文件进行上传
        "usedScene": {
          "ability": [
            ".EntryAbility"
          ],
          "when": "inuse"
        }
      },
      {
        "name": "ohos.permission.WRITE_MEDIA", //应用可能需要写入媒体文件(例如复制到缓存)
        "usedScene": {
          "ability": [
            ".EntryAbility"
          ],
          "when": "inuse"
        }
      },
      {
        "name": "ohos.permission.GET_NETWORK_INFO", //应用需要获取网络状态以优化上传策略
        "usedScene": {
          "ability": [
            ".EntryAbility"
          ],
          "when": "inuse"
        }
      },
      {
        "name": "ohos.permission.KEEP_BACKGROUND_RUNNING", //当熄屏或应用在系统后台时,仍能继续上传
        "usedScene": {
          "ability": [
            ".EntryAbility"
          ],
          "when": "always"
        }
      }
    ]
  }
}

声明后台模式

在 abilities 节点下,为您的主 Ability 添加 backgroundModes 声明,确保文件上传任务在后台可以继续执行。

// src/main/module.json5
"abilities": [
  {
    "name": "EntryAbility",
    // ... 其他配置
    "backgroundModes": [
      "dataTransfer" // 声明为数据传输模式,适用于文件上传
    ]
  }
]

基础设置

初始化上传实例

请先了解客户端上传的整体上传流程,并根据上传的授权方式部署对应的授权服务:

  1. 选择使用上传地址和凭证方式, 请在授权服务中获取上传地址和凭证

  2. 选择使用STS Token方式,请在授权服务中获取STS Token

初始化上传实例分为下列步骤:

  1. 获取凭证:客户端上传的整体流程需要通过凭证来验证上传的合法性。SDK 支持以下几种凭证方式:

    重要

    无论哪种方式获取凭证,您的服务器需要与阿里云 VOD 服务交互以获取或刷新这些凭证。请参考CreateUploadVideo - 获取音视频上传地址和凭证CreateUploadImage - 获取图片上传地址和凭证RefreshUploadVideo - 刷新视频上传凭证

    上传地址和凭证方式

    • 应用服务器调用点播的 CreateUploadVideo (视频/音频) 或 CreateUploadImage (图片) 接口,获取一次性上传地址(UploadAddress)和上传凭证(UploadAuth)。

    • 客户端通过 onUploadStarted 回调从应用服务器获取 uploadAuth 和 uploadAddress,并使用该信息完成上传操作。此方式安全性高,权限控制集中于应用服务器,建议用于生产环境部署。

    STS Token方式

    • 应用服务器向阿里云STS服务申请临时的安全令牌(AccessKeyId, AccessKeySecret, SecurityToken),并下发至客户端。

    • 客户端在初始化时提供 STS Token (AccessKeyId, AccessKeySecret, SecurityToken, ExpireTime)。SDK 将通过该 Token 在内部执行 VOD API 调用(如 CreateUploadVideo/Image)或直接上传至 OSS。

    AK/SK方式

    • 客户端使用阿里云主账号或RAM用户的永久AccessKeyIdAccessKeySecret,SDK 通过该凭证在内部执行 VOD API 调用。此方式用于客户端,存在AK/SK泄露风险,建议仅用于开发测试。

  2. 初始化上传实例:根据选择的认证方式,使用不同的 init 方法初始化 VODUploadClient 实例。

    上传地址和凭证方式

    import { VODUploadClient, VODUploadClientImpl } from '@aliyun_video_cloud/vod-upload-sdk';
    import { VODUploadCallback } from '@aliyun_video_cloud/vod-upload-sdk';
    import { common } from '@kit.AbilityKit';
    
    // 假设您在 UIAbility 中获取了 context
    let uiAbilityContext: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
    
    let uploader: VODUploadClient | null = null;
    let uploadCallback: VODUploadCallback; // 需要实现 VODUploadCallback 接口
    
    // 创建回调实例 (详细实现见下一节)
    uploadCallback = {
        onUploadSucceed: (info, result) => { /* ... */ },
        onUploadFailed: (info, code, message) => { /* ... */ },
        onUploadProgress: (info, uploadedSize, totalSize) => { /* ... */ },
        onUploadTokenExpired: () => { /* ... */ },
        onUploadRetry: (code, message) => { /* ... */ },
        onUploadRetryResume: () => { /* ... */ },
        onUploadStarted: (info) => { /* ... */ }
    };
    
    // 初始化上传实例
    uploader = new VODUploadClientImpl(uiAbilityContext);
    
    // 上传地址和凭证方式(推荐)
    // 这种方式下,SDK 会在 onUploadStarted 回调中请求应用服务器提供 uploadAuth 和 uploadAddress
    await uploader.init(uploadCallback);

    STS Token方式

    import { VODUploadClient, VODUploadClientImpl } from '@aliyun_video_cloud/vod-upload-sdk';
    import { VODUploadCallback } from '@aliyun_video_cloud/vod-upload-sdk';
    import { common } from '@kit.AbilityKit';
    
    // 假设您在 UIAbility 中获取了 context
    let uiAbilityContext: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
    
    let uploader: VODUploadClient | null = null;
    let uploadCallback: VODUploadCallback; // 需要实现 VODUploadCallback 接口
    
    // 创建回调实例 (详细实现见下一节)
    uploadCallback = {
        onUploadSucceed: (info, result) => { /* ... */ },
        onUploadFailed: (info, code, message) => { /* ... */ },
        onUploadProgress: (info, uploadedSize, totalSize) => { /* ... */ },
        onUploadTokenExpired: () => { /* ... */ },
        onUploadRetry: (code, message) => { /* ... */ },
        onUploadRetryResume: () => { /* ... */ },
        onUploadStarted: (info) => { /* ... */ }
    };
    
    // 初始化上传实例
    uploader = new VODUploadClientImpl(uiAbilityContext);
    
    // STS Token 方式
    // 传入从 STS 服务获取的临时 AccessKeyId, AccessKeySecret, SecurityToken, ExpireTime
    await uploader.init(
        "STS_ACCESS_KEY_ID",
        "STS_ACCESS_KEY_SECRET",
        "STS_SECURITY_TOKEN",
        "STS_EXPIRE_TIME_ISO8601", // ISO8601格式的STS凭证的过期时间, e.g. "2025-12-31T23:59:59Z"
        uploadCallback
    );

    AK/SK方式

    import { VODUploadClient, VODUploadClientImpl } from '@aliyun_video_cloud/vod-upload-sdk';
    import { VODUploadCallback } from '@aliyun_video_cloud/vod-upload-sdk';
    import { common } from '@kit.AbilityKit';
    
    // 假设您在 UIAbility 中获取了 context
    let uiAbilityContext: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
    
    let uploader: VODUploadClient | null = null;
    let uploadCallback: VODUploadCallback; // 需要实现 VODUploadCallback 接口
    
    // 创建回调实例 (详细实现见下一节)
    uploadCallback = {
        onUploadSucceed: (info, result) => { /* ... */ },
        onUploadFailed: (info, code, message) => { /* ... */ },
        onUploadProgress: (info, uploadedSize, totalSize) => { /* ... */ },
        onUploadTokenExpired: () => { /* ... */ },
        onUploadRetry: (code, message) => { /* ... */ },
        onUploadRetryResume: () => { /* ... */ },
        onUploadStarted: (info) => { /* ... */ }
    };
    
    // 初始化上传实例
    uploader = new VODUploadClientImpl(uiAbilityContext);
    
    // AK/SK 方式(仅用于开发测试)
    //直接传入您的 AccessKeyId 和 AccessKeySecret
    await uploader.init("YOUR_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_SECRET", uploadCallback);
  3. 设置上传状态回调类:VODUploadCallback 是上传状态的回调。您需要实现以下方法以处理上传事件。

    import { VODUploadCallback, UploadFileInfo, VodUploadResult } from '@aliyun_video_cloud/vod-upload-sdk';
    import { VodUploadErrorType } from '@aliyun_video_cloud/vod-upload-sdk'; // 错误类型枚举
    
    class MyUploadCallback implements VODUploadCallback {
        onUploadSucceed(info: UploadFileInfo, result: VodUploadResult): void {
            console.info(`Upload succeeded: ${info.getFileName()}, VideoId: ${result.getVideoId()}, ImageUrl: ${result.getImageUrl()}`);
            // 您可以根据 result 中的 videoId 或 imageUrl 进行后续操作
        }
    
        onUploadFailed(info: UploadFileInfo, code: string, message: string): void {
            console.error(`Upload failed: ${info.getFileName()}, Code: ${code}, Message: ${message}`);
            // 根据错误码和信息处理失败情况,例如提示用户重试或检查凭证
        }
    
        onUploadProgress(info: UploadFileInfo, uploadedSize: number, totalSize: number): void {
            const progress = totalSize > 0 ? (uploadedSize / totalSize) * 100 : 0;
            console.info(`Upload progress: ${info.getFileName()} - ${progress.toFixed(2)}% (${uploadedSize}/${totalSize})`);
            // 更新 UI 进度条
        }
    
        onUploadTokenExpired(): void {
            console.warn("Upload token expired. Need to refresh credentials.");
            // 在此回调中,您需要向您的应用服务器请求新的凭证,
            // 然后根据初始化方式调用 uploader.resumeWithAuth(newAuth) 或 uploader.resumeWithToken(...)
        }
    
        onUploadRetry(code: string, message: string): void {
            console.warn(`Upload will retry. Code: ${code}, Message: ${message}`);
            // 可以在 UI 上显示重试提示
        }
    
        onUploadRetryResume(): void {
            console.info("Upload retry resumed.");
            // 可以在 UI 上移除重试提示
        }
    
        onUploadStarted(uploadFileInfo: UploadFileInfo): void {
            console.info(`Upload started: ${uploadFileInfo.getFileName()}`);
            // 如果使用上传地址和凭证方式初始化 SDK (即 uploader.init(callback)),
            // 则在此回调中向您的应用服务器请求 uploadAuth 和 uploadAddress,
            // 然后调用 uploader.setUploadAuthAndAddress(uploadFileInfo, uploadAuth, uploadAddress);
            // 示例:
            // myAppServer.getUploadCredentials(uploadFileInfo.getFileName())
            //     .then(credentials => {
            //         uploader.setUploadAuthAndAddress(uploadFileInfo, credentials.uploadAuth, credentials.uploadAddress);
            //     })
            //     .catch(error => {
            //         console.error("Failed to get upload credentials from server:", error);
            //         uploader.onUploadFailed(uploadFileInfo, VodUploadErrorType.VOD_API_ERROR, "Failed to get upload credentials.");
            //     });
        }
    }
  4. 构造上传请求函数:通过addFile 方法将文件加入上传队列。您可以为文件指定 VOD 相关的元数据。

    重要

    HarmonyOS中,通常使用 picker API实现文件选择, 返回值为文件URI。由于点播上传SDK的 addFile 方法要求本地路径,您需要将用户选择的URI( content:// )复制至应用沙箱缓存目录。

    import { VodInfo, UploadFileInfo } from '@aliyun_video_cloud/vod-upload-sdk';
    import { picker } from '@kit.CoreFileKit';
    import { common } from '@kit.AbilityKit';
    import { FileUtils } from '@aliyun_video_cloud/vod-upload-sdk'; // SDK 提供的文件工具类
    
    // 假设 uploader 实例已初始化
    
    async function selectAndAddFiles(uiAbilityContext: common.UIAbilityContext) {
        const docPicker = new picker.DocumentViewPicker();
        const selectOptions: picker.DocumentSelectOptions = {
            maxSelectNumber: 5, // 允许选择最多5个文件
            fileTypes: ['video/*', 'image/*', 'audio/*'] // 限制文件类型
        };
    
        try {
            const selectedUris = await docPicker.select(selectOptions);
    
            if (selectedUris && selectedUris.length > 0) {
                for (const uri of selectedUris) {
                    const originalFileName = FileUtils.getFileName(uri);
                    const tempFileName = `${Date.now()}_${Math.random().toString(36).substring(2, 8)}_${originalFileName}`;
                    const cacheDirectory = uiAbilityContext.cacheDir; // 获取应用缓存目录
                    const localTempFilePath = `${cacheDirectory}/${tempFileName}`;
    
                    // 将文件复制到应用沙箱缓存目录,以便 SDK 访问
                    try {
                        await FileUtils.copyUriToFile(uiAbilityContext, uri, localTempFilePath);
                        const fileSize = await FileUtils.getFileSize(localTempFilePath);
    
                        // 构造 VodInfo,包含媒体元数据
                        const vodInfo = new VodInfo();
                        vodInfo.setTitle(`鸿蒙上传-${originalFileName}`);
                        vodInfo.setFileName(originalFileName); // 设置原始文件名,SDK会自动从路径解析
                        vodInfo.setFileSize(String(fileSize));
                        vodInfo.setDescription("这是通过鸿蒙 SDK 上传的视频/图片");
                        vodInfo.setTags("HarmonyOS,Demo,Upload");
                        vodInfo.setCateId(19); // 替换为您的点播分类ID
                        // vodInfo.setCoverUrl("http://your.cdn.com/cover.jpg"); // 可选:指定封面URL
                        // vodInfo.setUserData("{\"key\":\"value\"}"); // 可选:自定义数据,用于上传加速等
    
                        // 添加文件到上传队列
                        uploader.addFile(localTempFilePath, vodInfo);
                        console.info(`Added file to queue: ${originalFileName}, path: ${localTempFilePath}`);
    
                    } catch (copyError) {
                        console.error(`Failed to copy file ${originalFileName} to cache:`, copyError);
                        // 处理文件复制失败的情况,例如通知用户
                    }
                }
            } else {
                console.info("No files selected.");
            }
        } catch (error) {
            console.error("File selection failed:", error);
        }
    }

    VodInfo 对象用于承载上传文件的元数据信息。主要属性包括:

    说明

    高级配置参数(如 storageLocationtemplateGroupIdworkflowId) 可在后续高级功能中配置,或通过 VodInfo 单独设置文件。

    字段

    类型

    说明

    title

    string

    视频/图片标题。

    fileName

    string

    原始文件名称,应包含扩展名。主要用于点播服务记录,通常SDK会尝试从文件路径中提取。

    description

    string

    描述。

    tags

    string

    标签,多个标签用逗号分隔。

    appId

    string

    应用 ID。

    cateId

    number

    分类 ID。

    coverUrl

    string

    封面 URL。

    partSize

    number

    单个文件上传的分片大小,优先级高于全局 setPartSize

    imageType

    string

    图片类型。default

    (普通图片)或 cover

    (视频封面图)。仅当上传图片时有效。

    templateGroupId

    string

    转码模板组 ID。与 workflowId

    同时设置时,workflowId

    优先。

    workflowId

    string

    工作流 ID。

    storageLocation

    string

    存储地址。

    userData

    string

    自定义设置,JSON 字符串,用于上传加速等高级功能。

  5. 开始上传:调用 start() 方法开始上传。SDK 会按添加顺序处理文件队列。

    // 假设 uploader 实例已初始化,且已通过 addFile 添加了文件
    
    // 开始上传
    uploader.start();
    • 如果SDK使用凭证方式初始化,调用start() 方法后,对于未设置Endpoint/Bucket/Object的待上传文件,会先触发 onUploadStarted 回调。您需要在该回调中异步获取文件的uploadAuthuploadAddress,并通过 uploader.setUploadAuthAndAddress(uploadFileInfo, uploadAuth, uploadAddress) 进行设置。

    • 文件开始上传OSS后,onUploadProgress 回调会同步更新上传进度。

  6. 执行结果:

    1. 视频上传:成功时,onUploadSucceed 回调返回的 VodUploadResult 对象包含 VideoId,可用于获取播放地址进行播放。详情请参见获取播放地址

    2. 图片上传:成功时,onUploadSucceed 回调返回的 VodUploadResult 对象包含 ImageUrl。开启URL鉴权后imageUrl会有过期时间。详情请参见配置URL鉴权

队列管理

VODUploadClient 支持添加多个文件顺序上传,并提供了以下方法管理上传队列:

说明

VODUploadClient支持多文件上传,但如果使用上传凭证和地址方式上传,仍需为每个文件单独设置。由于多文件上传会增加代码复杂度,建议只添加单文件上传。

  • 从队列中删除上传文件,如果待删除的文件正在上传中,则取消上传并自动上传下一个文件。

    deleteFile(index: number): void
  • 清空上传队列,如果有文件在上传,则取消上传。

    clearFiles(): void
  • 获取上传文件队列。

    listFiles(): Array<UploadFileInfo>
  • 取消指定索引文件的上传,文件仍保留在上传列表中,状态标记为已取消。如果待取消的文件正在上传中,则取消上传并自动上传下一个文件。

    cancelFile(index: number): void
  • 将之前调用 cancelFile 标记为取消的或上传失败的文件,在指定索引处恢复上传状态,使其可以被重新上传。SDK会在下次处理队列时或 start() 调用后尝试上传它。

    resumeFile(index: number): void

上传控制

VODUploadClient 支持以下上传控制方法:

  • 停止所有上传活动。如果有文件正在上传中,则取消这些上传。调用 stop() 后,队列中的文件(未成功、未失败、未取消的)状态会重置为初始(READY)状态,等待下一次 start() 调用。

    stop(): void
  • 暂停所有正在进行的上传活动。SDK状态将变为 PAUSED。已开始上传的OSS分片会继续完成当前分片,但不会开启新的分片上传。

    pause(): void
  • 恢复之前通过 pause() 暂停的上传活动。SDK状态将变为 STARTED,并从暂停点继续上传。

    resume(): void

高级设置

VODUploadClient支持回调处理、超时处理、分片上传设置、指定存储地址、断点续传、蜂窝网络上传策略、上传加速、设置转码、设置点播服务地域、设置应用ID等高级设置。具体示例如下:

回调处理

VODUploadClient 通过 VODUploadCallback 接口处理各种事件:

  • 上传失败(onUploadFailed)

    当文件上传失败时触发。回调参数中包含错误码(code)和错误信息(message),可用于定位问题和用户提示。错误码可能源自VOD API、OSS服务或SDK内部。详情请参见公共错误码异常响应

  • 上传凭证过期 (onUploadTokenExpired)

    STS TokenVOD上传凭证(UploadAuth)过期时触发。收到回调后,可以从应用服务器获取新凭证。

    • 若是STS Token过期(影响VOD API调用或OSS直接上传),调用 uploader.resumeWithToken(newStsAk, newStsSk, newToken, newExpireTime)

    • 若是VOD上传凭证(UploadAuth)过期,调用 uploader.resumeWithAuth(newUploadAuth)

  • 上传重试 (onUploadRetry / onUploadRetryResume):在 onUploadRetry 回调中,应用可以提示用户正在重试,或在达到一定重试次数后调用 cancelFile()或 stop() 来停止。

    • onUploadRetry: SDK内部的VOD API调用或OSS上传操作因可重试错误(如网络超时)自动发起重试前触发。

    • onUploadRetryResume: 重试成功并恢复上传时触发。

超时处理

SDK允许配置HTTP请求的超时参数和最大重试次数。

import { VodHttpClientConfig } from '@aliyun_video_cloud/vod-upload-sdk';

const httpClientConfig = new VodHttpClientConfig();
httpClientConfig.setConnectionTimeout(15000); // 连接超时时间,单位毫秒,默认15000
httpClientConfig.setSocketTimeout(30000);    // Socket读取超时时间,单位毫秒,默认30000
httpClientConfig.setMaxRetryCount(3);        // HTTP请求最大重试次数,默认3

if (uploader) { // 确保 uploader 已初始化
  uploader.setVodHttpClientConfig(httpClientConfig);
}

分片上传设置

SDK默认启用分片上传。可通过以下方法调整分片行为:

  • setPartSize(partSize: number): void:设置分片大小(单位:字节),默认1MB (1 * 1024 * 1024 字节)。当文件超过设置大小时,将自动分片上传。

    // uploader 已初始化
    uploader.setPartSize(2 * 1024 * 1024); // 设置为2MB
  • setDisableMultiPart(disable: boolean): void:设为true时将禁用分片上传,所有文件将通过简单PUT Object方式上传。适用于明确知道待上传文件较小,或特定场景无需分片的情况。默认为 false (即启用分片)。

    // uploader 已初始化
    uploader.setDisableMultiPart(true); // 禁用分片上传

指定存储地址

VODUploadClient实例支持为VOD流程上传的文件(需调用CreateUploadVideo/Image获取凭证)指定存储地址(指点播控制台配置的存储位置标识,OSS Bucket 的 Region 和 Endpoint 由 VOD 服务返回)。

说明
  • 此设置为全局配置,将影响后续所有VOD流程上传的文件,除非在 VodInfo 中单独指定 storageLocation

  • 直接OSS上传模式(addFile时提供了endpoint, bucket, objectKey)不受此设置影响。

// uploader 已初始化
uploader.setStorageLocation("outin-xxxx.oss-cn-shanghai.aliyuncs.com"); // 从点播控制台获取

断点续传

SDK默认开启断点续传功能,该功能依赖于记录上传进度。

说明

此功能仅对分片上传有效。当文件较小未分片,或通过 setDisableMultiPart(true) 禁用分片时,功能不生效。

  • setRecordUploadProgressEnabled(enabled: boolean): void:设置是否记录上传进度以支持断点续传,默认值为 true (开启)。

    // uploader 已初始化
    uploader.setRecordUploadProgressEnabled(true); // 确保开启

蜂窝网络上传策略

SDK提供蜂窝网络自动暂停上传功能。

说明

此功能需满足:

  1. 应用已获取 ohos.permission.GET_NETWORK_INFO 权限。

  2. SDK 网络监听模块正常运行。

网络切回 Wi-Fi/以太网时将自动恢复上传(仅限策略触发的暂停)。若是手动 pause() 暂停需调用 resume() 恢复上传。

  • setPauseOnCellular(enabled: boolean): void:设置蜂窝网络时自动暂停上传,默认值为 false (不自动暂停)。

    // uploader 已初始化
    uploader.setPauseOnCellular(true); // 开启蜂窝网络下自动暂停
  • isPauseOnCellularEnabled(): boolean:检查当前是否已设置蜂窝网络自动暂停策略。

上传加速

当需要上传较大文件(GB、TB级别)或进行跨区域上传时,可启用上传加速功能。详情请参见开通方式。开通后,在构建VodInfo 对象时,通过 setUserData 方法设置包含加速配置的JSON字符串。示例如下:

const vodInfo = new VodInfo();
// ... 其他 VodInfo 设置 ...
const userData = {
  "Vod": { // 确保顶层有 "Vod" 结构
    "UserData": { // 自定义用户数据
      "AccelerateConfig": { // 上传加速配置
        "Type": "oss", // 固定为 "oss"
        "Domain": "your-accelerate-domain.oss-accelerate.aliyuncs.com" // 您的加速域名
      }
    }
  }
};
vodInfo.setUserData(JSON.stringify(userData));

参数描述

名称

类型

说明

Type

string

开启上传加速的类型(仅支持oss)。

Domain

string

阿里云分配给您Bucket的加速域名(默认为HTTPS)。

设置转码

VOD流程上传的音视频文件可指定转码模板组ID或工作流ID实现自动转码。

说明
  • 同时设置WorkflowId 和 TemplateGroupId时,以 WorkflowId 为准。

  • 此设置全局生效(影响后续所有VOD流程文件),除非在 VodInfo 中单独指定。

  • 客户端上传SDK不支持工作流方式的图片转码,请使用图片样式或独立图片处理服务。

  • setTemplateGroupId(templateGroupId: string): void:设置转码模板组ID。

    // uploader 已初始化
    uploader.setTemplateGroupId("your-template-group-id");
  • setWorkflowId(workflowId: string): void:设置工作流ID。

    // uploader 已初始化
    uploader.setWorkflowId("your-workflow-id");

设置点播服务地域

设置点播服务API的接入地域,并指定OSS上传时STS凭证的对应区域(适用于上传凭证未提供OSS Region信息)。默认值为 "cn-shanghai"

  • setRegion(region: string): void

    // uploader 已初始化
    uploader.setRegion("cn-beijing"); // 例如,设置为华北2(北京)

设置应用ID

通过该方法设置应用ID,可将媒体资源上传至指定应用(适用于使用了视频点播多应用体系)。

说明

此设置全局生效(影响后续所有VOD流程文件),除非在 VodInfo 中单独指定 appId

  • setAppId(appId: string): void

    // uploader 已初始化
    uploader.setAppId("app-yourxxxxid");