文档管理中心
指南云存储HarmonyOSJava上传文件

上传文件

通过云存储SDK,您可以快速上传本地设备上的文件到云端,同时可以对上传任务进行管理,如暂停、继续、取消上传任务,监控上传进度,任务异常中断后进行断点续传等。

前提条件

上传本地文件

您可以通过引用操作本地设备上的文件,将文件上传到云端的存储实例中。

  1. 创建待上传文件的引用。

    调用AGCStorageManagement.getStorageReference方法创建待上传文件的引用,以将本地文件上传到预先规划的云端地址中。

    Java
    收起
    自动换行
    深色代码主题
    复制
    1. StorageReference reference = storageManagement.getStorageReference("images/demo.jpg");
    说明
    • 上传文件或创建目录时,会对名称和文件大小进行严格的检查,具体限制请参见使用限制
    • 如需支持断点续传,上传文件应携带SHA256值,且最大为50GB,云存储SDK会按照分片上传的方式将文件上传至服务器,直到文件全部上传完毕。若上传任务异常中断,云存储SDK会根据设置的最大重试次数从断点续传位置进行重试上传。
    • 如无需支持断点续传,上传文件可不携带SHA256值,且最大为5GB,云存储SDK会按照单次上传的方式将文件上传至服务器。若上传任务异常中断,请重新尝试上传。
  2. 调用StorageReference.putFile方法将文件上传到存储实例中。
    说明

    上传文件前支持您设置文件的自定义属性,具体请参见设置元数据

    Java
    收起
    自动换行
    深色代码主题
    复制
    1. UploadTask task = reference.putFile(new File("path/images/test.jpg"));
    2. task.addOnFailureListener(new OnFailureListener(){
    3. @Override
    4. public void onFailure(@NonNull Exception exception) {
    5. }
    6. }).addOnSuccessListener(new OnSuccessListener<UploadTask.UploadResult>(){
    7. @Override
    8. public void onSuccess(UploadTask.UploadResult uploadResult) {
    9. }
    10. });

    如果您需要在上传文件时为文件指定自定义属性,可以使用putFile(File srcFile, FileMetadata attribute)方法。

    如果您需要在上传文件时支持断点续传,可以使用putFile(File srcFile, FileMetadata attribute, Long offset)方法,offset设为0。若任务异常中断,您可以再次调用该方法恢复任务,从中断的位置开始上传,offset的值通过UploadTask.UploadResult.getBytesTransferred方法获取。

  3. 使用putFile方法上传文件后,会返回UploadTask的实例,您可以通过监听UploadTask的状态了解上传任务的相关状态。

管理上传任务

切换上传任务的状态

文件在正常上传过程中,可通过调用UploadTask类的pauseresumecancel方法(继承自StorageTask)切换上传任务的状态。

  • pause:暂停一个处于上传过程中的上传任务。
  • resume:唤醒一个处于暂停状态的上传任务。
  • cancel:取消一个上传任务。
Java
收起
自动换行
深色代码主题
复制
  1. StorageReference reference = storageManagement.getStorageReference("images/demo.jpg");
  2. UploadTask task = reference.putFile(new File("images/test.jpg"));
  3. task.pause();
  4. task.resume();
  5. task.cancel();

监控上传任务的进度

文件在上传时,可通过调用StorageTask类的addOnProgressListener、addOnPausedListener、addOnSuccessListener、addOnFailureListener、addOnCanceledListener、addOnCompleteListener方法,添加UploadTask的监听器来监控上传任务中的状态切换。

  • addOnProgressListener:当上传任务中需要定期刷新任务进度时调用此监听器。
  • addOnPausedListener:当任务暂停时调用此监听器。
  • addOnSuccessListener:当任务成功时调用此监听器。
  • addOnFailureListener:当任务失败时调用此监听器。
  • addOnCanceledListener:当任务取消时调用此监听器。
  • addOnCompleteListener:当任务完成时调用此监听器。
Java
收起
自动换行
深色代码主题
复制
  1. StorageReference reference = storageManagement.getStorageReference("images/demo.jpg");
  2. UploadTask task = reference.putFile(new File("path/images/test.jpg"));
  3. task.addOnFailureListener(new OnFailureListener(){
  4. @Override
  5. public void onFailure(@NonNull Exception exception) {
  6. }
  7. }).addOnSuccessListener(new OnSuccessListener<UploadTask.UploadResult>(){
  8. @Override
  9. public void onSuccess(UploadTask.UploadResult uploadResult) {
  10. }
  11. }).addOnProgressListener(new OnProgressListener<UploadTask.UploadResult>(){
  12. @Override
  13. public void onProgress(UploadTask.UploadResult uploadResult) {
  14. System.out.println(String.format("progress: %f", (uploadResult.getBytesTransferred()*1.0)/uploadResult.getTotalByteCount()));
  15. }
  16. }).addOnPausedListener(new OnPausedListener<UploadTask.UploadResult>(){
  17. @Override
  18. public void onPaused(UploadTask.UploadResult uploadResult) {
  19. }
  20. }).addOnCanceledListener(new OnCanceledListener(){
  21. @Override
  22. public void onCanceled() {
  23. }
  24. }).addOnCompleteListener(new OnHarmonyCompleteListener<UploadTask.UploadResult>(){
  25. @Override
  26. public void onComplete(HarmonyTask<UploadTask.UploadResult> task) {
  27. }
  28. });

异常情况下继续未完成的上传任务

上传任务在执行的过程中,可能会因为使用方式、网络环境等原因产生的StorageException异常导致上传任务中断,通过断点续传接口putFile(File srcFile, FileMetadata attribute, Long offset),可以继续未完成的上传任务,提升用户的使用体验。

说明
  • 上传任务的会话会保存一周,您可以尝试恢复此任务,当会话超期或发生异常时,恢复会失败。
  • 在会话的有效期内,临时文件会占用一定的存储空间,该存储空间会体现在存储使用量内。
Java
收起
自动换行
深色代码主题
复制
  1. FileMetadata attribute = new FileMetadata();
  2. attribute.setContentType("image/jpeg");
  3. attribute.setSHA256Hash("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef");
  4. StorageReference reference = storageManagement.getStorageReference("images/demo.jpg");
  5. UploadTask task = reference.putFile(new File("path/images/test.jpg"), attribute, 100L);

更多信息

在 指南 中进行搜索
请输入您想要搜索的关键词