使用FilePick上传uri失败,报错201,如何解决?

使用FilePick上传uri失败,并报错:"Invoke photoViewPicker.select failed, code is 201, message is Permission verification failed"。

阅读 570
avatarAI BotBETA

这个问题似乎与Android开发相关,特别是与文件选择和权限验证有关。报错代码201和消息"Permission verification failed"表明在尝试选择文件或访问照片时,应用没有足够的权限。

以下是解决此问题的一些建议:

  1. 检查权限请求
    确保你已经在应用的AndroidManifest.xml中添加了必要的权限。对于访问照片或文件,通常需要以下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

对于Android 6.0(API级别23)及以上版本,你还需要在运行时请求这些权限。

  1. 运行时权限请求
    如果你的应用目标是Android 6.0或更高版本,你需要在运行时请求权限。这通常涉及检查权限是否已授予,如果没有,则请求权限。例如:
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {

    // Permission is not granted
    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_EXTERNAL_STORAGE)) {
        // Show an explanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.
    } else {
        // No explanation needed; request the permission
        ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);

        // MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
} else {
    // Permission has already been granted
}
  1. 检查FilePick的配置
    确保你正确配置了FilePick库,并按照文档中的说明使用它。确保在调用select方法之前已经处理了所有必要的权限。
  2. 检查其他因素
* 确保目标Android设备或模拟器上的存储不是满的。
* 检查是否有其他应用或设置阻止了你的应用访问存储。
* 尝试在不同的设备或模拟器上运行应用,看看问题是否仍然存在。

如果你能提供更多关于你的代码、配置或你正在使用的具体FilePick库的版本的信息,我可能能够提供更具体的帮助。

1 个回答

picker中获取的uri,不能在其回调函数中使用fs进行读写操作。参考如下示例:

import { image } from '@kit.ImageKit'; 
import { picker, fileIo } from '@kit.CoreFileKit'; 
import { BusinessError } from '@kit.BasicServicesKit'; 
 
@Entry 
@Component 
struct PixelMapToPhotoPage { 
  @State message: string = '选择图片并解析'; 
  @State text: string = ''; 
  private url: string | null = null; 
  onPageShow() { 
    if (!this.url) { 
      let pp = new picker.PhotoSelectOptions(); 
      pp.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; 
      pp.maxSelectNumber = 1; 
      let photoPicker = new picker.PhotoViewPicker(); 
      photoPicker.select(pp).then((selectResult) => { 
        this.url = selectResult.photoUris[0]; 
        console.info("AAAAAA ****** select photo success : " + this.url) 
      }).catch((err: BusinessError) => { 
        console.info("AAAAAA ****** error is : " + err) 
      }) 
    } 
  } 
  selectPhotoAndSave(url: string | null) { 
    if (this.url) { 
      let file = fileIo.openSync(url, fileIo.OpenMode.READ_ONLY); 
      let source = image.createImageSource(file.fd); 
      source.createPixelMap().then((pixelMap) => { 
        this.text = "图片大小为:" + pixelMap.getPixelBytesNumber() + "B"; 
      }) 
    } else { 
      console.info("AAAAAA ****** url is null") 
    } 
  } 
  build() { 
    Row() { 
      Column() { 
        Text(this.message) 
          .fontSize(20) 
          .fontWeight(FontWeight.Bold) 
        Button("图片解析") 
          .fontSize(20) 
          .margin({ top: 10 }) 
          .onClick(() => { 
            this.selectPhotoAndSave(this.url); 
          }) 
        Text(this.text) 
          .fontSize(20) 
          .width(200) 
          .height(200) 
          .borderWidth(1) 
          .borderRadius(15) 
          .margin({ top: 10 }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
}

参考链接

选择用户文件

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进