import RNFS from 'react-native-fs'
import { CameraRoll } from '@react-native-camera-roll/camera-roll'
import { PermissionsAndroid, Platform } from 'react-native'
import { getImageUrl } from '@/utils'
import PrivilegeUtil from './PrivilegeUtil'
const saveImageToAlbum = async (url: string) => {
try {
let canUse = await PrivilegeUtil.requestStorePermission()
if (!canUse) {
return false
}
const imageUrl = getImageUrl(encodeURI(url) || '') ?? ''
const destinationPath = `${RNFS.DocumentDirectoryPath}/${new Date().getTime()}.png`
const downloadResult = await RNFS.downloadFile({
fromUrl: imageUrl,
toFile: destinationPath,
})
const res = await downloadResult.promise
if (res.statusCode === 200) {
if (Platform.OS === 'ios') {
CameraRoll.saveAsset(destinationPath, { type: 'photo' })
.then((res) => {
Toast.success('图片下载成功,已保存到手机相册')
return true
})
.catch((err) => {
Toast.error('图片报错失败,请重试')
return false
})
} else {
return CameraRoll.saveAsset(`file://${destinationPath}`)
.then((res) => {
Toast.success('图片下载成功,已保存到手机相册')
return true
})
.catch((err) => {
Toast.error('图片报错失败,请重试')
return false
})
}
return true
} else {
Toast.error('图片下载失败,请重试')
return false
}
} catch (error) {
Toast.error('保存图片失败,请检查网络连接或权限设置。')
console.log('保存图片失败', error)
return false
}
}
export const saveImageToAlbumByLocal = async (url: string) => {
try {
let canUse = await PrivilegeUtil.requestStorePermission()
if (!canUse) {
return false
}
await CameraRoll.saveAsset(url, { type: 'photo' })
console.log('保存成功')
} catch (error) {
console.log('图片保存失败', error)
handleEventTracking({
tip: '图片保存失败--saveImageToAlbum.ts--47',
data: { error },
})
}
}
export default saveImageToAlbum