You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中无法将Firebase Storage远程图片保存至相机胶卷问题排查

问题原因分析

你遇到的这个问题其实很常见——PHAssetChangeRequest.creationRequestForAssetFromImage(atFileURL:)这个API只支持本地文件的URL,而你传入的是Firebase Storage的远程HTTPS链接,系统没办法直接从网络地址创建相册资产,所以才会抛出NSCocoaErrorDomain Code=-1这个模糊的错误。

解决方法:先下载图片再保存

正确的做法是先通过URLSession把远程图片下载成数据,转成UIImage之后再保存到相机胶卷。这里是修正后的代码:

// 替换成你的Firebase图片URL
let photoUrl = URL(string: "https://firebasestorage.googleapis.com/v0/b/nearbie-ee55a.appspot.com/o/wallpaper_pictures%2F52YgRFw4jWhYL5ulK11slBv7e583_E6A1D795-ED73-4C1E-98E1-CC97FF87E4C1?alt=media&token=0b090de3-43ab-426a-b63b-9d61372732d0")!

URLSession.shared.dataTask(with: photoUrl) { data, response, error in
    guard let imageData = data, let image = UIImage(data: imageData) else {
        print("图片下载失败或转成UIImage失败: \(error?.localizedDescription ?? "未知错误")")
        return
    }
    
    PHPhotoLibrary.shared().performChanges({
        PHAssetChangeRequest.creationRequestForAsset(from: image)
    }) { success, error in
        if let err = error {
            print("保存到相机胶卷失败: \(err)")
        } else {
            print("图片保存成功!")
        }
    }
}.resume()

额外注意点:

  • 别忘了在Info.plist中添加NSPhotoLibraryAddUsageDescription权限描述,否则保存时会被系统拒绝。
  • 下载操作是异步的,要确保在主线程之外执行;相册操作的回调也是在后台线程,如果需要更新UI,记得切回主线程。

内容的提问来源于stack exchange,提问作者K.Wu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:46:06