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
}
}