使用 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