如何将图片保存到React Native Camera Roll

时间:2018-01-08 13:23:36

标签: android ios react-native expo camera-roll

所以我使用Expo的Camera API来拍照,就像这样:

takePicture = async function() {
  if(this.camera) {
    this.camera.takePictureAsync().then(data => {
        CameraRoll.saveToCameraRoll(data.uri);
    }).then(() => {
      this.setState({
        photoId: this.state.photoId + 1,
      });
    });
  }
};

现在,我想专门检索我使用此应用程序拍摄的照片,以便稍后使用。我认为一个简单的方法是,如果应用程序将其图片保存到相机胶卷中的单独文件夹,就像Instagram在那里制作自己的文件夹一样。

如何让应用程序在相机胶卷中创建自己的文件夹,然后将图片保存到它?

2 个答案:

答案 0 :(得分:2)

在Android上,您可以使用react-native-fetch-blob及其文件系统访问API(PictureDir常量)。

例如,我这样做:

try {
    const data = await this.camera.takePictureAsync()
    await RNFetchBlob.fs.mkdir(`${RNFetchBlob.fs.dirs.PictureDir}/myfolder`)
    await RNFetchBlob.fs.mv(
        data.api, 
        `${RNFetchBlob.fs.dirs.PictureDir}/myfolder/${moment().unix()}.jpg`
    )
} catch () {
    ...
}

https://github.com/wkh237/react-native-fetch-blob/wiki/File-System-Access-API

答案 1 :(得分:0)

你也可以在这里看到答案。因为这里有同样的问题 https://stackoverflow.com/a/67533729/10361123

我知道我回答这个问题太晚了。

你可以简单地使用下面的 npm 包来获得你想要的输出

npm i @react-native-community/cameraroll

之后,您必须在 try catch 块中使用以下代码,以便您可以轻松地将图像存储在所需的路径上。

   try{
        CameraRoll.save(data.uri,{type:"photo",album:"../your folder name"}).
                    then((res)=>{console.log("save img...",res);}).
                    catch((err)=>{console.log("err for save img...",err);})
    }
    catch{
      //your code...
    }