ios - 使用 Firebase Storage 的 putFile() 方法导致 : The file “fileName” couldn’t be opened error

标签 ios swift url firebase firebase-storage

以下是我尝试上传文件的两种方式:

1.

getURLOfPhoto(assetURL: imagesDictionary[String(whichProfileImage)]! , completionHandler: { (responseURL) in          
                                    FIRStorage.storage().reference().putFile(responseURL as! URL)
                            })

2.

  let assets = PHAsset.fetchAssets(withALAssetURLs: [imagesDictionary[String(whichProfileImage)] as! URL], options: nil)
            let asset = assets.firstObject
            asset?.requestContentEditingInput(with: nil, completionHandler: { (contentEditingInput, info) in
                let imageFile = contentEditingInput?.fullSizeImageURL?

                FIRStorage.storage().reference().child("test").putFile(imageFile!, metadata: nil) { (metadata, error) in
                        if let error = error {                   
                            return
                        }   
                }
            })

我收到这个错误:

 Body file is unreachable: /var/mobile/Media/DCIM/100APPLE/picture.JPG        
    Error Domain=NSCocoaErrorDomain Code=257 "The file “picture.JPG” couldn’t be opened because you don’t have permission to view it."     
        UserInfo={NSURL=file:///var/mobile/Media/DCIM/100APPLE/picture.JPG, NSFilePath=/var/mobile/Media/DCIM/100APPLE/picture.JPG,     
    NSUnderlyingError=0x15da49a0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}

URL 似乎已成功检索,错误仅在调用 putFile() 方法时发生。

有谁知道如何修复此错误或以其他方式将文件(不是数据对象)上传到 Firebase 存储?

提前致谢

最佳答案

目前 Firebase 存储无法使用使用我在问题中使用的基于 PHAsset 的代码检索的文件 URL(或者至少根据我的经验它不能)——即使这些文件是用户携带的文件他们自己 iPhone 上的相机。因此,一种解决方案是将有问题的文件重新保存到 Firebase 存储 API 可以访问的位置,然后通过将该位置的 URL 传递到 putFile() 方法来上传文件。

如果您使用 imagePickerController() 方法,则可以使用此方法:

do {
   let documentsURL = FileManager.default().urlsForDirectory(.documentDirectory,
                                                                          inDomains: .userDomainMask)[0]
   let fileURL = try documentsURL.appendingPathComponent("fileName.jpg")

   let image = info[UIImagePickerControllerOriginalImage]

   try UIImageJPEGRepresentation(image as! UIImage,1.0)?.write(to: fileURL, options: [])

                    FIRStorage.storage().reference().child("exampleLocation")
                        .putFile(fileURL, metadata: nil) { (metadata, error) in
    if let error = error {
                                print("Error uploading: \(error.description)")
                                return
                            }
                       }                
                 }
         catch {
            print("error is ", error)
        }

关于ios - 使用 Firebase Storage 的 putFile() 方法导致 : The file “fileName” couldn’t be opened error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38425154/

相关文章:

ios - 抽屉导航- ios 中的滑动问题

java - 当我从我的 android 应用程序请求 http 页面时,移动关键字被添加到 url

html - 我应该使用哪个字符来分隔某些 URL?

objective-c - 钥匙串(keychain) kSecValueData 最后有奇怪的不显示字符

ios - 跳过Xcode调试器中的线程指令

ios - 将 PHAsset 转换为 UIImage 后设置 UiButton 图像

ios - 在 iOS 中实例化一个后台运行循环

ios - 使用 Swift 用 Core Data 对象填充 UIPickerView

ios - 在 Swift 中创建 PDF

java - 如何在java中追加URL