А
class UploadManager: NSObject, ObservableObject {
private let storageOperationsService = StorageOperationsService()
static var shared: UploadManager = {
let instance = UploadManager()
return instance
}()
var filename: String = String()
var albumId: String = String()
var accessToken: String = String()
private var session: URLSession!
private let identifier = "com.go.background."
var savedCompletionHandler: (() -> Void)?
func uploadFile(fileName: String, localURL: URL, accessToken: String){
let url = URL(string: "https://photoslibrary.googleapis.com/v1/uploads")!
var request = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalCacheData)
request.allHTTPHeaderFields = ["Content-type": "application/octet-stream",
"X-Goog-Upload-Protocol": "raw",
"X-Goog-Upload-File-Name": "\(fileName)",
"Accept-Encoding": "gzip"]
request.addValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
request.httpMethod = "POST"
let configuration = URLSessionConfiguration.background(withIdentifier: identifier + filename)
session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
let task = session.uploadTask(with: request, fromFile: localURL)
task.resume()
}
}
extension UploadManager: URLSessionDataDelegate {
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
if error != nil {
print("Error:", error.debugDescription)
} else {
storageOperationsService.removeOperationFromCoreData(filename: self.filename)
}
}
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
guard let uploadToken = String(data: data, encoding: .utf8) else { return }
}
func urlSessionDidFinishEvents(forBackgroundURLSession session: URLSession) {
DispatchQueue.main.async {
self.savedCompletionHandler?()
self.savedCompletionHandler = nil
}
}
}