簡體   English   中英

Swift:將文件從共享擴展名上傳到Firebase存儲

[英]Swift: Uploading a file to Firebase Storage from a Share Extension

我正在嘗試從iOS中的共享擴展名將圖像上傳到Firebase存儲,我已經通過身份驗證並正在與數據庫進行通信,但是當我嘗試上傳文件時,它立即失敗。

我已通過在主應用程序中使用它來確保正在使用的代碼能夠正常工作。 我還確保在正確上載文件之前將其保存在文件管理器中。

以下是用於在上傳之前保存文件的代碼:

if let data = downsizeImage(image: image).jpegData(compressionQuality: 0.2) {
    let fileManager = FileManager.default

    let url = fileManager.containerURL(forSecurityApplicationGroupIdentifier: "group.com.<DOMAIN>.imageShare")?.appendingPathComponent("ImageToSend.jpg")
    do {
          try data.write(to: url!)
        }
    catch {
          print(error.localizedDescription)
        }
}

這是上傳任務的代碼:

let storageRef: StorageReference = Storage.storage().reference().child(storageLocation).child(UUID().uuidString)

var completed = false
var mediaUploadTask: StorageUploadTask?
let mediaTimeoutTask = DispatchWorkItem{ () in
            if !completed {
                    mediaUploadTask?.cancel()
                }
}

DispatchQueue.main.asyncAfter(deadline: .now() + 30, execute: mediaTimeoutTask)
mediaUploadTask = storageRef.putFile(from: mediaUrl, metadata: nil) {(metadata, error) in
completed = true
...
}

應該發生的情況是圖像已成功上傳,並且該功能將繼續正常運行。 實際上發生的是上傳幾乎立即失敗。 這是返回的錯誤:

Printing description of error:
▿ Optional<Error>
  - some : Error Domain=FIRStorageErrorDomain Code=-13000 "An unknown error occurred, please check the server response." 
UserInfo={bucket=link-ages-55880.appspot.com,
 _NSURLErrorFailingURLSessionTaskErrorKey=BackgroundUploadTask <AC5EADEA-6257-4C32-9454-17626156AA15>.<1>,
 object=media/4qnjSBKysi79uCR3cTzf/04D22317-D2C0-4A5C-B032-4F37DB2C8F7A,
 _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "BackgroundUploadTask <AC5EADEA-6257-4C32-9454-17626156AA15>.<1>"
), 
NSLocalizedDescription=An unknown error occurred, please check the server response., 
ResponseErrorDomain=NSURLErrorDomain, ResponseErrorCode=-995}

如果有人對問題可能有任何想法,將不勝感激。 謝謝。

這是調試器的屏幕截圖: 調試器截圖

我發現了問題所在。 由於iOS沙箱的工作方式,請致電:

storageRef.putFile(from: mediaUrl, metadata: nil, completion: {(metadata, error) in})

失敗。 更多信息在這里: 原始答案

而是調用:

storageRef.putData(Data, metadata: nil, completion: {(metadata, error) in})

按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM