|
|
@@ -28,29 +28,24 @@ import Foundation
|
|
|
final class MultipartUpload {
|
|
|
lazy var result = Result { try build() }
|
|
|
|
|
|
- let isInBackgroundSession: Bool
|
|
|
- let multipartFormData: MultipartFormData
|
|
|
+ @Protected
|
|
|
+ private(set) var multipartFormData: MultipartFormData
|
|
|
let encodingMemoryThreshold: UInt64
|
|
|
let request: URLRequestConvertible
|
|
|
let fileManager: FileManager
|
|
|
|
|
|
- init(isInBackgroundSession: Bool,
|
|
|
- encodingMemoryThreshold: UInt64,
|
|
|
+ init(encodingMemoryThreshold: UInt64,
|
|
|
request: URLRequestConvertible,
|
|
|
multipartFormData: MultipartFormData) {
|
|
|
- self.isInBackgroundSession = isInBackgroundSession
|
|
|
self.encodingMemoryThreshold = encodingMemoryThreshold
|
|
|
self.request = request
|
|
|
fileManager = multipartFormData.fileManager
|
|
|
self.multipartFormData = multipartFormData
|
|
|
}
|
|
|
|
|
|
- func build() throws -> (request: URLRequest, uploadable: UploadRequest.Uploadable) {
|
|
|
- var urlRequest = try request.asURLRequest()
|
|
|
- urlRequest.setValue(multipartFormData.contentType, forHTTPHeaderField: "Content-Type")
|
|
|
-
|
|
|
+ func build() throws -> UploadRequest.Uploadable {
|
|
|
let uploadable: UploadRequest.Uploadable
|
|
|
- if multipartFormData.contentLength < encodingMemoryThreshold && !isInBackgroundSession {
|
|
|
+ if multipartFormData.contentLength < encodingMemoryThreshold {
|
|
|
let data = try multipartFormData.encode()
|
|
|
|
|
|
uploadable = .data(data)
|
|
|
@@ -73,16 +68,22 @@ final class MultipartUpload {
|
|
|
uploadable = .file(fileURL, shouldRemove: true)
|
|
|
}
|
|
|
|
|
|
- return (request: urlRequest, uploadable: uploadable)
|
|
|
+ return uploadable
|
|
|
}
|
|
|
}
|
|
|
|
|
|
extension MultipartUpload: UploadConvertible {
|
|
|
func asURLRequest() throws -> URLRequest {
|
|
|
- try result.get().request
|
|
|
+ var urlRequest = try request.asURLRequest()
|
|
|
+
|
|
|
+ $multipartFormData.read { multipartFormData in
|
|
|
+ urlRequest.headers.add(.contentType(multipartFormData.contentType))
|
|
|
+ }
|
|
|
+
|
|
|
+ return urlRequest
|
|
|
}
|
|
|
|
|
|
func createUploadable() throws -> UploadRequest.Uploadable {
|
|
|
- try result.get().uploadable
|
|
|
+ try result.get()
|
|
|
}
|
|
|
}
|