全部产品

文件上传

通过阅读本文,您可以了解文件上传的方式和基本流程。

操作步骤

  1. 请求上传地址和凭证或STS。

    说明

    点播文件上传类VODUploadClient支持上传地址和凭证或STS方式上传,推荐使用上传地址和凭证方式进行上传。

    • 请求上传地址和凭证

      上传图片和上传视频获取上传地址和凭证所请求的API不同,如下所示:

      上传视频:客户端向AppServer发送请求,AppServer通过OpenAPI向阿里云点播服务发送CreateUploadVideo请求。请求成功将返回上传地址、上传凭证以及VideoId,AppServer将结果返回给客户端。

      上传图片:客户端向AppServer发送请求,AppServer通过OpenAPI向阿里云点播服务发送CreateUploadImage请求。请求成功将返回上传地址、上传凭证以及ImageURL,AppServer将结果返回给客户端。

    • 请求STS

      通过STS方式,客户端向AppServer发送请求,AppServer向阿里云STS服务请求临时STS凭证。请求成功将返回STS凭证,AppServer将结果返回给客户端。

  2. 初始化上传实例。

    1. 声明VODUploadClient初始化回调。

      uploader = new VODUploadClientImpl(getApplicationContext());
    2. 初始化上传实例有两种方式,如下所示:

      • 上传地址和凭证方式

        上传地址和凭证方式调用init方法初始化。

        请求获取的上传地址和凭证初始化时无需设置,在上传开始后触发的onUploadStarted回调中调用setUploadAuthAndAddress(uploadFileInfo, uploadAuth, uploadAddress)方法进行设置。

        当token超时,会触发onUploadTokenExpired回调,需要调用resumeWithAuth(uploadAuth)方法,设置新的上传凭证继续上传。

        // create VODUploadClient
        final VODUploadClient uploader = new VODUploadClientImpl(getApplicationContext());
        // setup callback
        VODUploadCallback callback = new VODUploadCallback() {
                    public void onUploadSucceed(UploadFileInfo info) {
                        OSSLog.logDebug("onsucceed ------------------" + info.getFilePath());
                    }
                    public void onUploadFailed(UploadFileInfo info, String code, String message) {
                        OSSLog.logError("onfailed ------------------ " + info.getFilePath() + " " + code + " " + message);
                    }
                    public void onUploadProgress(UploadFileInfo info, long uploadedSize, long totalSize) {
                        OSSLog.logDebug("onProgress ------------------ " + info.getFilePath() + " " + uploadedSize + " " + totalSize);
                            }
                        }
                    }
                    public void onUploadTokenExpired() {
                        OSSLog.logError("onExpired ------------- ");
                            //重新刷新上传凭证:RefreshUploadVideo
                            uploadAuth = "此处需要设置重新刷新凭证之后的值";
                            uploader.resumeWithAuth(uploadAuth);
                    }
                    public void onUploadRetry(String code, String message) {
                        OSSLog.logError("onUploadRetry ------------- ");
                    }
                    public void onUploadRetryResume() {
                        OSSLog.logError("onUploadRetryResume ------------- ");
                    }
                    public void onUploadStarted(UploadFileInfo uploadFileInfo) {
                        OSSLog.logError("onUploadStarted ------------- ");
                        uploader.setUploadAuthAndAddress(uploadFileInfo, uploadAuth, uploadAddress);
                    }
                };
        //上传初始化
        uploader.init(callback);
      • STS方式

        STS方式调用init(accessKeyId, accessKeySecret, secretToken, expireTime, callback)方法初始化,初始化参数是请求获取的临时STS凭证。

        当token过期时,触发OnUploadTokenExpired回调,需要调用resumeWithToken(accessKeyId, accessKeySecret, secretToken, expireTime)方法,设置新的STS继续上传。

        // create VODUploadClient object
        uploader = new VODUploadClientImpl(getApplicationContext());
        // setup callback
        // setup callback
        VODUploadCallback callback = new VODUploadCallback() {
                    public void onUploadSucceed(UploadFileInfo info) {
                        OSSLog.logDebug("onsucceed ------------------" + info.getFilePath());
                    }
                    public void onUploadFailed(UploadFileInfo info, String code, String message) {
                        OSSLog.logError("onfailed ------------------ " + info.getFilePath() + " " + code + " " + message);
                    }
                    public void onUploadProgress(UploadFileInfo info, long uploadedSize, long totalSize) {
                        OSSLog.logDebug("onProgress ------------------ " + info.getFilePath() + " " + uploadedSize + " " + totalSize);
                            }
                        }
                    }
                    public void onUploadTokenExpired() {
                        OSSLog.logError("onExpired ------------- ");
                            //重新获取STS之后调用resumeWithToken
                            uploader.resumeWithToken(accessKeyId, accessKeySecret, secretToken, expireTime);
                    }
                    public void onUploadRetry(String code, String message) {
                        OSSLog.logError("onUploadRetry ------------- ");
                    }
                    public void onUploadRetryResume() {
                        OSSLog.logError("onUploadRetryResume ------------- ");
                    }
                    public void onUploadStarted(UploadFileInfo uploadFileInfo) {
                        OSSLog.logError("onUploadStarted ------------- ");
                    }
                };
        //初始化,临时账号过期时,在onUploadTokenExpired事件中,用resumeWithToken更新临时账号,上传默认支持断点续传
        uploader.init(accessKeyId, accessKeySecret, secretToken, expireTime, callback);
  3. 回调设置。

    设置VODUploadCallback对象,该对象是上传状态的回调类,需要设置下列回调方法:

    /**
     上传完成回调
     @param info 上传文件信息
     */
    void onUploadSucceed(UploadFileInfo info);
    /**
     上传失败回调
     @param info 上传文件信息
     @param code 错误码
     @param message 错误描述
     */
     void onUploadFailed(UploadFileInfo info, String code, String message);
    /**
     上传进度回调
     @param fileInfo 上传文件信息
     @param uploadedSize 已上传大小
     @param totalSize 总大小
     */
     void onUploadProgress(UploadFileInfo info, long uploadedSize, long totalSize);
    /**
     token过期回调
     上传地址和凭证方式上传需要调用resumeWithAuth方法继续上传
     STS方式上传需要调用resumeWithToken方法继续上传
     */
     void onUploadTokenExpired();
    /**
     上传开始重试回调
     */
     void onUploadRetry(String code, String message);
    /**
     上传结束重试,继续上传回调
     */
     void onUploadRetryResume ();
    /**
     开始上传回调
     上传地址和凭证方式上传需要调用setUploadAuthAndAddress:uploadAuth:uploadAddress:方法设置上传地址和凭证
     @param fileInfo 上传文件信息
     */
      void onUploadStarted(UploadFileInfo uploadFileInfo);
  4. 添加文件到上传列表。

    • 添加文件

      • 添加视频

        String filePath = "文件地址";
        VodInfo vodInfo = new VodInfo();
        vodInfo.setTitle("标题" + index);
        vodInfo.setDesc("描述." + index);
        vodInfo.cateId (19);
        vodInfo.tags("sports");
        uploader.addFile(filePath,vodInfo);
      • 添加图片

        javaString filePath = “图片文件地址”;
        VodInfo vodInfo = new VodInfo();
        vodInfo.setTitle(“标题” + index);
        vodInfo.setDesc(“描述.” + index);
        vodInfo.cateId (19);
        vodInfo.tags(“sports”);
        uploader.addFile(filePath,vodInfo);
      说明

      支持的文件不大于4 GB。

      VodInfo具体结构如下:

      //标题
      String title;
      //标签
      List tags;
      //描述
      String desc;
      //分类
      idInteger cateId;
      //封面url(完整的URL https://)
      String coverUrl;

      添加文件后,SDK会将待上传文件封装为UploadFileInfo对象,具体结构如下:

      //文件本地路径
      String filePath;
      //endpoint
      String endpoint;
      //bucket
      String bucket;
      //object
      String object;
      //VodInfo
      VodInfo vodInfo;

    • 管理上传队列

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

      说明

      尽管VODUploadClient支持多文件上传,如果使用上传凭证和地址方式上传,每个文件还是需要单独设置。基于多文件上传代码复杂度的考虑,建议只添加单文件上传。

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

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

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

        List<UploadFileInfo> listFiles()
      • 将文件标记为取消,文件仍保留在上传列表中。如果待取消的文件正在上传中,则取消上传并自动上传下一个文件。

        cancelFile(int index)
      • 恢复已取消的上传文件,并自动开始上传。

        resumeFile(int index)
  5. 上传控制。

    • 开始上传。

      void start();

      该方法调用后,会触发onUploadStarted回调。如果通过上传地址和凭证方式上传,需要在该回调方法中设置上传地址和凭证。代码如下:

      void setUploadAuthAndAddress(UploadFileInfo uploadFileInfo, String uploadAuth, String uploadAddress)

    • 停止上传,如果有文件正在上传中,则取消上传。

      void stop();
      说明

      停止上传后如需恢复上传,请调用resumeFile恢复待上传文件,或者清空队列后重新添加文件上传。

    • 暂停上传。

      void pause();
    • 恢复上传。

      void resume();
  6. 回调处理。

    • 上传进度

      每上传一个分片,会触发onUploadProgress回调,回调参数包括已上传文件大小uploadedSize和总文件大小totalSize

    • 上传成功

      上传成功时,会触发onUploadSucceed回调。回调包含上传结果的videoIdimageUrl属性。

      说明
      • 视频上传成功后会返回videoId作为视频id,拿到videoId之后需要获取播放地址进行播放。更多信息,请参见通过播放凭证播放

      • 图片上完成后会返回imageUrl,开启URL鉴权后imageUrl会有过期时间。更多信息,请参见URL鉴权

    • 上传失败

      上传失败时,会触发onUploadFailed回调。在该回调方法中,可以通过codemessage查看具体原因,并在页面上提示。更多错误码信息,请参见错误码表OSS错误码

    • 凭证过期处理

      上传凭证或STS过期,会触发onSTSTokenExpried回调。在该回调方法中,可以向AppServer重新请求新的STS凭证,并调用以下方法继续上传。

      refreshSTSToken(accessKeyId,accessKeySecret,securityToken,expriedTime);

    • 超时处理

      上传超时,会触发uploadRetry回调并自动重试。在该回调方法中,可以在页面上给予提示或者调用cancel方法停止上传。此外,可以设置maxRetryCount属性,指定最大重试次数。超时重试可以继续上传时,会触发uploadRetryResume回调并恢复上传。

高级设置

VODUploadClient支持以下高级设置。

/**
 上传文件到服务端是否转码,默认值YES
 */
void setTranscodeMode(boolean bool);
/**
 分片大小,默认值1024 * 1024
*/
void setPartSize(long partSize);
/**
* 指定视频文件的存储区域
*/
void setStorageLocation(String storageLocation);
/**
* 设置转码模版组Id
*/
void setTemplateGroupId(String templateGroupId);