使用鸿蒙SDK上传文件

更新时间:
复制 MD 格式

本文介绍如何使用鸿蒙 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.3", // 请使用最新的稳定版本
}

如果您是手动下载 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_IMAGE, ohos.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 (图片) 接口,获取一次性上传地址(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用户的永久AccessKeyId和AccessKeySecret,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 对象用于承载上传文件的元数据信息。主要属性包括:

    说明

    高级配置参数(如 storageLocation, templateGroupId, workflowId) 可在后续高级功能中配置,或通过 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 回调。您需要在该回调中异步获取文件的uploadAuth和uploadAddress,并通过 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内部。详情请参见公共错误码和异常响应(iOS SDK)。

  • 上传凭证过期 (onUploadTokenExpired)

    当STS Token或VOD上传凭证(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");