开发者问题收集

使用 expo 将图片保存到 mediaLibrary 时出现问题

2020-04-28
4855

我对 React 和 React Native 完全陌生,但我正在努力学习。

当我尝试将图片保存到手机图库时遇到问题

因此,我正在导入

import { MediaLibrary } from 'expo-media-library'

此外,我正在使用状态

const [hasPermission, setHasPermission] = useState(null);
const [type, setType] = useState(Camera.Constants.Type.back);
const [cameraRef, setCameraRef] = useState(null)

除了保存照片外,这里一切正常

<TouchableOpacity style={{alignSelf: 'center'}} onPress={async() => {
            if(cameraRef){
              let photo = await cameraRef.takePictureAsync();
              console.log('photo', photo);
              MediaLibrary.saveToLibraryAsync(photo.uri)

            }
          }}>

在我的控制台日志中,我看到了对象

    photo Object {
     "height": 4156,
     "uri": "file:///var/mobile/Containers/Data/Application/B7CCEDB6-DFC5-4898-BD70-B2FF1159FC1B/Library/Caches/ExponentExperienceData/%2540anonymous%252Ftest-5bfa90d8-12e9-44fe-a19d-69bb5eeb74b9/Camera/D783C734-29B9-489B-9798-A0737388E93C.jpg",
     "width": 2376,
}

但我找不到将其保存到相机胶卷的方法,我总是收到此错误

[Unhandled promise rejection: TypeError: undefined is not an object (evaluating '_expoMediaLibrary.MediaLibrary.saveToLibraryAsync')]

任何帮助都将不胜感激

R.

2个回答

我认为您在使用 promise 时遇到了未定义对象错误,因为您没有将 MediaLibrary.saveToLibraryAsync()await 关联起来。

您可能应该将 MediaLibrary.saveToLibraryAsync()await 放在一起,就像您对 takePictureAsync() 所做的那样,因为它是一个异步函数。

let photo = await cameraRef.takePictureAsync();
console.log('photo', photo);
await MediaLibrary.saveToLibraryAsync(photo.uri);

只是一个假设,希望它能帮助您解决它。

hemistone
2020-05-30

这是由于导入问题而发生的。

// Change from this
import { MediaLibrary } from 'expo-media-library';
// To this
import * as MediaLibrary from 'expo-media-library'; 

这个问题已在下面的帖子中得到回答。在此提及是因为如果有人可能再次遇到此问题。

[未处理的承诺拒绝:TypeError:未定义不是对象(评估'_expoMediaLibrary.MediaLibrary.createAssetAsync')]

Tharaka Ananda
2022-06-07