Post

Replies

Boosts

Views

Activity

Need to upload multipart form data( video, image with params) in background until upload is not finished no matter app is in background or switched to other app or terminated.
This Code is not working. Any Help will be appreciated. func UPLOAD_VIDEO_WITH_DATA(_ video: [UploadImageInfo], param: [String: Any]) { if !APIManager.isConnectedToNetwork() { APIManager().networkErrorMsg() return } let url = URL(string: API.CAMPAIGN.create)! var request = URLRequest(url: url) let boundary = "Boundary-\(NSUUID().uuidString)" var body = Data() body.append(boundary) body.append("--\(boundary)\r\n") body.append("Content-Disposition: form-data; name=\"params\"\r\n") body.append("Content-Type: application/json\r\n\r\n") body.append("\(param)") body.append("\r\n") let tempDirectoryURL = FileManager.default.temporaryDirectory let videoURL = tempDirectoryURL.appendingPathComponent("video.mp4") for videoInfo in video { if videoInfo.video != nil { if let videoData = videoInfo.data { try? videoData.write(to: videoURL) body.append("--\(boundary)\r\n") body.append("Content-Disposition: form-data; name=\"video\"; filename=\"\(videoInfo.video?.absoluteString)\"\r\n") body.append("Content-Type: video/mp4\r\n\r\n") body.append(videoData) body.append("\r\n") } } } body.append("--\(boundary)--\r\n") request.httpMethod = "POST" request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") request.setValue("Bearer \(self.getMultipartHeaderWithToken())", forHTTPHeaderField: "Authorization") request.httpBody = body print(request) let session = URLSession(configuration: URLSessionConfiguration.background(withIdentifier: "com.app.Deloa.backgroundUpload")) DispatchQueue.global().async { let task = session.uploadTask(with: request, fromFile: videoURL) task.resume() } } public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { if let error = error { print("Error uploading data: \(error)") } else { print("Data uploaded successfully!") } } extension Data { mutating func append(_ string: String) { if let data = string.data(using: .utf8) { append(data) } } } Here is the data i am passing for video ` override func selectedVideo(choosenVideo: URL, thumbnailImage: UIImage) { var selectedVideo = UploadImageInfo() selectedVideo.name = "video" selectedVideo.video = choosenVideo selectedVideo.data = try? Data(contentsOf: choosenVideo) selectedVideo.url = choosenVideo.absoluteString self.media.append(selectedVideo) var selectedThumbnail = UploadImageInfo() selectedThumbnail.name = "thumbnail" selectedThumbnail.image = thumbnailImage selectedThumbnail.data = compressImage(image: thumbnailImage) self.media.append(selectedThumbnail) }` Upload Image struct struct UploadImageInfo { var id: Int var name: String var image: UIImage? var video : URL? var thumbnail: UIImage? var data: Data? var url: String? init() { name = "" image = nil video = nil id = 0 thumbnail = nil data = nil url = nil } }
0
0
1.3k
Jul ’23
Need to upload multipart form data( video, image with params) in background until upload is not finished no matter app is in background or switched to other app or terminated.
This Code is not working. Any Help will be appreciated. func UPLOAD_VIDEO_WITH_DATA(_ video: [UploadImageInfo], param: [String: Any]) { if !APIManager.isConnectedToNetwork() { APIManager().networkErrorMsg() return } let url = URL(string: API.CAMPAIGN.create)! var request = URLRequest(url: url) let boundary = "Boundary-\(NSUUID().uuidString)" var body = Data() body.append(boundary) body.append("--\(boundary)\r\n") body.append("Content-Disposition: form-data; name=\"params\"\r\n") body.append("Content-Type: application/json\r\n\r\n") body.append("\(param)") body.append("\r\n") let tempDirectoryURL = FileManager.default.temporaryDirectory let videoURL = tempDirectoryURL.appendingPathComponent("video.mp4") for videoInfo in video { if videoInfo.video != nil { if let videoData = videoInfo.data { try? videoData.write(to: videoURL) body.append("--\(boundary)\r\n") body.append("Content-Disposition: form-data; name=\"video\"; filename=\"\(videoInfo.video?.absoluteString)\"\r\n") body.append("Content-Type: video/mp4\r\n\r\n") body.append(videoData) body.append("\r\n") } } } body.append("--\(boundary)--\r\n") request.httpMethod = "POST" request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") request.setValue("Bearer \(self.getMultipartHeaderWithToken())", forHTTPHeaderField: "Authorization") request.httpBody = body print(request) let session = URLSession(configuration: URLSessionConfiguration.background(withIdentifier: "com.app.Deloa.backgroundUpload")) DispatchQueue.global().async { let task = session.uploadTask(with: request, fromFile: videoURL) task.resume() } } public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { if let error = error { print("Error uploading data: \(error)") } else { print("Data uploaded successfully!") } } extension Data { mutating func append(_ string: String) { if let data = string.data(using: .utf8) { append(data) } } } Here is the data i am passing for video ` override func selectedVideo(choosenVideo: URL, thumbnailImage: UIImage) { var selectedVideo = UploadImageInfo() selectedVideo.name = "video" selectedVideo.video = choosenVideo selectedVideo.data = try? Data(contentsOf: choosenVideo) selectedVideo.url = choosenVideo.absoluteString self.media.append(selectedVideo) var selectedThumbnail = UploadImageInfo() selectedThumbnail.name = "thumbnail" selectedThumbnail.image = thumbnailImage selectedThumbnail.data = compressImage(image: thumbnailImage) self.media.append(selectedThumbnail) }` Upload Image struct struct UploadImageInfo { var id: Int var name: String var image: UIImage? var video : URL? var thumbnail: UIImage? var data: Data? var url: String? init() { name = "" image = nil video = nil id = 0 thumbnail = nil data = nil url = nil } }
Replies
0
Boosts
0
Views
1.3k
Activity
Jul ’23
How to send user activity data to server in background when user closed/killed the application.
I have an application, in which I want to send data of user activity to our server when the user killed/closed the application. If it is unsuccessful in sending data to the server in the background then I will send all data when the user relaunches the app again. Is there a method to do this?
Replies
0
Boosts
0
Views
606
Activity
Feb ’23