代码之家  ›  专栏  ›  技术社区  ›  Oscar Franco

React native,如何获取文件资产镜像的绝对路径?

  •  4
  • Oscar Franco  · 技术社区  · 8 年前

    我在react native上对ios做一些图像处理。

    问题是我使用的一个库只支持绝对路径,但我只有文件资产uri。

    例子

    assets-library://asset/asset.HEIC?id=CE542E92-B1FF-42DC-BD89-D61BB70EB4BF&ext=HEIC
    

    我需要:

    file:///Users/USERNAME/Library/Developer/CoreSimulator/Devices/########-####-####-####-############/data/Containers/Data/Application/########-####-####-####-############/Documents/########-####-####-####-############.jpg
    

    有什么方法可以很容易地得到图像的绝对路径吗?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Brunno Vodola Martins    7 年前

    这就是我最后所做的,基于@ospfroco的回答。 我在临时文件夹中保存了一份资产副本。还包括一个小片段,用于为文件名生成随机字符串。

    import RNFS from 'react-native-fs';
    
    getAssetFileAbsolutePath = async (assetPath) => {
        const dest = `${RNFS.TemporaryDirectoryPath}${Math.random().toString(36).substring(7)}.jpg`;
    
        try {
          let absolutePath = await RNFS.copyAssetsFileIOS(assetPath, dest, 0, 0);
          console.log(absolutePath)
        } catch(err) {
          console.log(err)
        } 
      }
    
        2
  •  1
  •   Oscar Franco    7 年前

    最后我没有找到一个好的方法来做这件事。

    我最后用 react-native-fs copyAssetsFileIOS 要将文件复制到app沙盒文档目录,这给了我一个绝对路径目录。

    希望能帮上忙。

        3
  •  1
  •   Makx    6 年前

    这个问题是老问题,但我回答它是为了帮助像我这样的人,新的反应,本地人,有同样的问题。 我正在努力从cameraroll中获取图像,并用OCR库对其进行处理。我在用 react-native-photo-framework 我发现你可以 使用方法 getImageMetadata 用这些资产。我需要此文件URL,因为格式为“photo://…”的原始URI未被识别为OCR库的有效URL。我还没有用真正的设备和iCloud资源测试过它。例子:

    const statusObj = await RNPhotosFramework.requestAuthorization()
    if (statusObj.isAuthorized) {
        const assetList = await RNPhotosFramework.getAssets({
          includeMetadata: true,
          includeResourcesMetadata: true,
          fetchOptions: {
            mediaTypes: ['image'],
            sourceTypes: ['userLibrary', 'cloudShared', 'itunesSynced'],
          }
        })
        const asset = photos.assets[0]
        const metadata = await asset.getImageMetadata()
        const uri = metadata.imageMetadata.fileUrl
    }