HarmonyOS 鸿蒙Next 端云一体化开发云存储功能上传图片失败

发布于 1周前 作者 htzhanglong 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 端云一体化开发云存储功能上传图片失败

用的真机mate60在运行项目,可以正确进入选择图片,选择图片也可以开始上传,但是传完之后执行的fail回调,而不是completed回调,很奇怪。。可以看到错误信息中有提到403,但是各种权限已经都开了。

代码如下: upload方法是直接复制的文档内容--https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/cloudfoundation-storage-upload-file-V5

import { cloudStorage } from '@kit.CloudFoundationKit';
import { BusinessError, request } from '@kit.BasicServicesKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { fileIo as fs } from '@kit.CoreFileKit';

let storageBucket: cloudStorage.StorageBucket = cloudStorage.bucket('default-bucket-bpweb');

@Entry
@Component
export struct testStoragePage {
  build() {
    Column(){
      Navigation()
        .title('云存储')
        .height('50vp')
        .width('100%')
        .margin({ bottom: 10 })
        .titleMode(NavigationTitleMode.Mini)
      Button('点击')
        .onClick(()=>{
          this.upload()
        })
    }
  }

  //上传指定文件至云侧
  upload() {
    // 使用photoAccessHelper选择指定的文件
    let photoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
    photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE; // 过滤选择媒体文件类型为IMAGE
    photoSelectOptions.maxSelectNumber = 1; // 选择媒体文件的最大数目
    let photoViewPicker = new photoAccessHelper.PhotoViewPicker();
    photoViewPicker.select(photoSelectOptions).then((photoSelectResult: photoAccessHelper.PhotoSelectResult) => {
      let fileUri = photoSelectResult.photoUris[0];
      console.info(`pick file ${fileUri}`);
      let fileName = fileUri.split('/').pop() as string;
      console.info(`file name ${fileName}`);
      let cacheFile = `${Date.now()}_${fileName}`;
      console.info(`cacheFile ${cacheFile}`);
      let cacheFilePath = getContext().cacheDir + '/' + cacheFile;

      // 将选中文件copy至cache目录下,文件名为cacheFile
      try {
        let srcFile = fs.openSync(fileUri);
        let dstFile = fs.openSync(cacheFilePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
        fs.copyFileSync(srcFile.fd, dstFile.fd);
        fs.closeSync(srcFile);
        fs.closeSync(dstFile);
      } catch (e) {
        console.info(`copy file failed ${e.message}`);
        return;
      }

      // 上传至云存储默认实例
      storageBucket.uploadFile(getContext(this), {
        localPath: cacheFile, // 本地文件路径,context.cacheDir目录下的文件
        cloudPath: fileName    // 云侧路径
      }).then((task: request.agent.Task) => {
        task.on('progress', (progress) => {
          console.info(`on progress ${JSON.stringify(progress)}`);
        });
        task.on('completed', (progress) => {
          console.info(`on completed ${JSON.stringify(progress)}`);
        });
        task.on('failed', (progress) => {
          console.error(`on failed ${JSON.stringify(progress)}`);
        });
        task.on('response', (response) => {
          console.info(`on response ${JSON.stringify(response)}`);
        });

        // start task
        task.start((err: BusinessError) => {
          if (err) {
            console.error(`Failed to start the uploadFile task, Code: ${err.code}, message: ${err.message}`);
          } else {
            console.info(`Succeeded in starting a uploadFile task.`);
          }
        });
      }).catch((err: BusinessError) => {
        console.error(`uploadFile failed, Code: ${err.code}, message: ${err.message}`);
      });
    });
  }
}

这是agc中的云存储实例

在选择图片开始上传之后,可以正确触发onProgress,并且最终能看到上传字节大小与图片字节大小是一致的,但是最终还是提示上传失败...

3 回复

403是无权限的问题

检查下本地工程的bundleName是否与AGC上的项目中的应用bundleName相同

可以将该应用生成个debug证书进行运行测试

确认了,bundleName是一样的~目前尝试了把agcconnect_services.json那个文件下载到本地,还是不行。

针对HarmonyOS 鸿蒙Next端云一体化开发云存储功能上传图片失败的问题,可能的原因及解决方案如下:

  1. 权限配置:确保在module.json5配置文件中添加了网络权限声明,如"ohos.permission.INTERNET",以允许应用执行网络请求。
  2. 文件选择:验证文件选择器API是否正确获取了文件的路径和内容,鸿蒙系统的文件系统可能与Android或iOS有所不同。
  3. 请求构建:检查使用HttpRequest或类似网络请求库构建的POST请求是否正确设置了Content-Type,通常为multipart/form-data。
  4. 服务器响应:分析服务器返回的响应码和错误信息,以确定上传失败的具体原因。例如,403 Forbidden错误通常指示服务器拒绝访问请求,需要检查API密钥、Token或其他身份验证信息是否有效。
  5. 调试和日志:使用调试工具和日志记录来跟踪上传过程中的问题,以便进行故障排除。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部