0001 http://alamofire.org/)
0023 import Foundation
0024
0025 extension Manager {
0026 private enum Uploadable| Upload.swift:32 | private func upload(uploadable: Uploadable) -> Request { |
{
0027 case Data| Upload.swift:37 | case .Data(let request, let data): |
| Upload.swift:122 | return upload(.Data(URLRequest.URLRequest, data)) |
(NSURLRequest, NSData)
0028 case File| Upload.swift:41 | case .File(let request, let fileURL): |
| Upload.swift:83 | return upload(.File(URLRequest.URLRequest, file)) |
(NSURLRequest, NSURL)
0029 case Stream| Upload.swift:45 | case .Stream(let request, let stream): |
| Upload.swift:162 | return upload(.Stream(URLRequest.URLRequest, stream)) |
(NSURLRequest, NSInputStream)
0030 }
0031
0032 private func upload| Upload.swift:83 | return upload(.File(URLRequest.URLRequest, file)) |
| Upload.swift:122 | return upload(.Data(URLRequest.URLRequest, data)) |
| Upload.swift:162 | return upload(.Stream(URLRequest.URLRequest, stream)) |
(uploadable: Uploadable) -> Request {
0033 var uploadTask: NSURLSessionUploadTask!
0034 var HTTPBodyStream: NSInputStream?
0035
0036 switch uploadable {
0037 case .Data(let request, let data):
0038 dispatch_sync(queue) {
0039 uploadTask = self.session.uploadTaskWithRequest(request, fromData: data)
0040 }
0041 case .File(let request, let fileURL):
0042 dispatch_sync(queue) {
0043 uploadTask = self.session.uploadTaskWithRequest(request, fromFile: fileURL)
0044 }
0045 case .Stream(let request, let stream):
0046 dispatch_sync(queue) {
0047 uploadTask = self.session.uploadTaskWithStreamedRequest(request)
0048 }
0049
0050 HTTPBodyStream = stream
0051 }
0052
0053 let request = Request(session: session, task: uploadTask)
0054
0055 if HTTPBodyStream != nil {
0056 request.delegate.taskNeedNewBodyStream = { _, _ in
0057 return HTTPBodyStream
0058 }
0059 }
0060
0061 delegate[request.delegate.task] = request.delegate
0062
0063 if startRequestsImmediately {
0064 request.resume()
0065 }
0066
0067 return request
0068 }
0069
0070
0072 parameterparameterreturns
0082 public func upload| Alamofire.swift:181 | return Manager.sharedInstance.upload(URLRequest, file: file) |
| Upload.swift:106 | return upload(mutableURLRequest, file: file) |
| Upload.swift:321 | request: self.upload(URLRequestWithContentType, file: fileURL), |
(URLRequest: URLRequestConvertible, file: NSURL) -> Request {
0083 return upload(.File(URLRequest.URLRequest, file))
0084 }
0085
0086 parameterparameterparameterparameterreturns
0098 public func upload| Alamofire.swift:169 | return Manager.sharedInstance.upload(method, URLString, headers: headers, file: file) |
(
0099 method: Method,
0100 _ URLString: URLStringConvertible,
0101 headers: [String: String]? = nil,
0102 file: NSURL)
0103 -> Request
0104 {
0105 let mutableURLRequest = URLRequest(method, URLString, headers: headers)
0106 return upload(mutableURLRequest, file: file)
0107 }
0108
0109
0111 parameterparameterreturns
0121 public func upload| Alamofire.swift:215 | return Manager.sharedInstance.upload(URLRequest, data: data) |
| Upload.swift:146 | return upload(mutableURLRequest, data: data) |
| Upload.swift:295 | request: self.upload(URLRequestWithContentType, data: data), |
(URLRequest: URLRequestConvertible, data: NSData) -> Request {
0122 return upload(.Data(URLRequest.URLRequest, data))
0123 }
0124
0125 parameterparameterparameterparameterreturns
0137 public func upload| Alamofire.swift:203 | return Manager.sharedInstance.upload(method, URLString, headers: headers, data: data) |
(
0138 method: Method,
0139 _ URLString: URLStringConvertible,
0140 headers: [String: String]? = nil,
0141 data: NSData)
0142 -> Request
0143 {
0144 let mutableURLRequest = URLRequest(method, URLString, headers: headers)
0145
0146 return upload(mutableURLRequest, data: data)
0147 }
0148
0149
0151 parameterparameterreturns
0161 public func upload| Alamofire.swift:249 | return Manager.sharedInstance.upload(URLRequest, stream: stream) |
| Upload.swift:186 | return upload(mutableURLRequest, stream: stream) |
(URLRequest: URLRequestConvertible, stream: NSInputStream) -> Request {
0162 return upload(.Stream(URLRequest.URLRequest, stream))
0163 }
0164
0165 parameterparameterparameterparameterreturns
0177 public func upload| Alamofire.swift:237 | return Manager.sharedInstance.upload(method, URLString, headers: headers, stream: stream) |
(
0178 method: Method,
0179 _ URLString: URLStringConvertible,
0180 headers: [String: String]? = nil,
0181 stream: NSInputStream)
0182 -> Request
0183 {
0184 let mutableURLRequest = URLRequest(method, URLString, headers: headers)
0185
0186 return upload(mutableURLRequest, stream: stream)
0187 }
0188
0189
0191 public static let MultipartFormDataEncodingMemoryThreshold| Alamofire.swift:270 | encodingMemoryThreshold: UInt64 = Manager.MultipartFormDataEncodingMemoryThreshold, |
| Alamofire.swift:295 | encodingMemoryThreshold: UInt64 = Manager.MultipartFormDataEncodingMemoryThreshold, |
| Upload.swift:239 | encodingMemoryThreshold: UInt64 = Manager.MultipartFormDataEncodingMemoryThreshold, |
| Upload.swift:279 | encodingMemoryThreshold: UInt64 = Manager.MultipartFormDataEncodingMemoryThreshold, |
: UInt64 = 10 * 1024 * 1024
0193
0194
0203 public enum MultipartFormDataEncodingResult| Alamofire.swift:271 | encodingCompletion: (Manager.MultipartFormDataEncodingResult -> Void)?) |
| Alamofire.swift:296 | encodingCompletion: (Manager.MultipartFormDataEncodingResult -> Void)?) |
| Upload.swift:240 | encodingCompletion: (MultipartFormDataEncodingResult -> Void)?) |
| Upload.swift:280 | encodingCompletion: (MultipartFormDataEncodingResult -> Void)?) |
| Upload.swift:294 | let encodingResult = MultipartFormDataEncodingResult.Success( |
| Upload.swift:320 | let encodingResult = MultipartFormDataEncodingResult.Success( |
{
0204 case Success| Upload.swift:294 | let encodingResult = MultipartFormDataEncodingResult.Success( |
| Upload.swift:320 | let encodingResult = MultipartFormDataEncodingResult.Success( |
(request: Request, streamingFromDisk: Bool, streamFileURL: NSURL?)
0205 case Failure| Upload.swift:305 | encodingCompletion?(.Failure(error as NSError)) |
| Upload.swift:329 | encodingCompletion?(.Failure(error as NSError)) |
(ErrorType)
0206 }
0207
0208 parameterparameterparameterparameterparameterparameter
0234 public func upload| Alamofire.swift:273 | return Manager.sharedInstance.upload( |
(
0235 method: Method,
0236 _ URLString: URLStringConvertible,
0237 headers: [String: String]? = nil,
0238 multipartFormData: MultipartFormData -> Void,
0239 encodingMemoryThreshold: UInt64 = Manager.MultipartFormDataEncodingMemoryThreshold,
0240 encodingCompletion: (MultipartFormDataEncodingResult -> Void)?)
0241 {
0242 let mutableURLRequest = URLRequest(method, URLString, headers: headers)
0243
0244 return upload(
0245 mutableURLRequest,
0246 multipartFormData: multipartFormData,
0247 encodingMemoryThreshold: encodingMemoryThreshold,
0248 encodingCompletion: encodingCompletion
0249 )
0250 }
0251
0252 parameterparameterparameterparameter
0276 public func upload| Alamofire.swift:298 | return Manager.sharedInstance.upload( |
| Upload.swift:244 | return upload( |
(
0277 URLRequest: URLRequestConvertible,
0278 multipartFormData: MultipartFormData -> Void,
0279 encodingMemoryThreshold: UInt64 = Manager.MultipartFormDataEncodingMemoryThreshold,
0280 encodingCompletion: (MultipartFormDataEncodingResult -> Void)?)
0281 {
0282 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
0283 let formData = MultipartFormData()
0284 multipartFormData(formData)
0285
0286 let URLRequestWithContentType = URLRequest.URLRequest
0287 URLRequestWithContentType.setValue(formData.contentType, forHTTPHeaderField: "Content-Type")
0288
0289 let isBackgroundSession = self.session.configuration.identifier != nil
0290
0291 if formData.contentLength < encodingMemoryThreshold && !isBackgroundSession {
0292 do {
0293 let data = try formData.encode()
0294 let encodingResult = MultipartFormDataEncodingResult.Success(
0295 request: self.upload(URLRequestWithContentType, data: data),
0296 streamingFromDisk: false,
0297 streamFileURL: nil
0298 )
0299
0300 dispatch_async(dispatch_get_main_queue()) {
0301 encodingCompletion?(encodingResult)
0302 }
0303 } catch {
0304 dispatch_async(dispatch_get_main_queue()) {
0305 encodingCompletion?(.Failure(error as NSError))
0306 }
0307 }
0308 } else {
0309 let fileManager = NSFileManager.defaultManager()
0310 let tempDirectoryURL = NSURL(fileURLWithPath: NSTemporaryDirectory())
0311 let directoryURL = tempDirectoryURL.URLByAppendingPathComponent("com.alamofire.manager/multipart.form.data")
0312 let fileName = NSUUID().UUIDString
0313 let fileURL = directoryURL.URLByAppendingPathComponent(fileName)
0314
0315 do {
0316 try fileManager.createDirectoryAtURL(directoryURL, withIntermediateDirectories: true, attributes: nil)
0317 try formData.writeEncodedDataToDisk(fileURL)
0318
0319 dispatch_async(dispatch_get_main_queue()) {
0320 let encodingResult = MultipartFormDataEncodingResult.Success(
0321 request: self.upload(URLRequestWithContentType, file: fileURL),
0322 streamingFromDisk: true,
0323 streamFileURL: fileURL
0324 )
0325 encodingCompletion?(encodingResult)
0326 }
0327 } catch {
0328 dispatch_async(dispatch_get_main_queue()) {
0329 encodingCompletion?(.Failure(error as NSError))
0330 }
0331 }
0332 }
0333 }
0334 }
0335 }
0336
0337
0339 extension Request {
0340
0341
0343 class UploadTaskDelegate| Manager.swift:430 | } else if let delegate = self[task] as? Request.UploadTaskDelegate { |
| Request.swift:61 | delegate = UploadTaskDelegate(task: task) |
| Request.swift:124 | if let uploadDelegate = delegate as? UploadTaskDelegate { |
: DataTaskDelegate {
0344 var uploadTask: NSURLSessionUploadTask? { return task as? NSURLSessionUploadTask }
0345 var uploadProgress| Request.swift:125 | uploadDelegate.uploadProgress = closure |
| Upload.swift:370 | uploadProgress?(bytesSent, totalBytesSent, totalBytesExpectedToSend) |
: ((Int64, Int64, Int64) -> Void)!
0346
0347
0349
0351 var taskDidSendBodyData| Upload.swift:364 | if let taskDidSendBodyData = taskDidSendBodyData { |
: ((NSURLSession, NSURLSessionTask, Int64, Int64, Int64) -> Void)?
0352
0353
0355 func URLSession| Manager.swift:431 | delegate.URLSession( |
(
0356 session: NSURLSession,
0357 task: NSURLSessionTask,
0358 didSendBodyData bytesSent: Int64,
0359 totalBytesSent: Int64,
0360 totalBytesExpectedToSend: Int64)
0361 {
0362 if initialResponseTime == nil { initialResponseTime = CFAbsoluteTimeGetCurrent() }
0363
0364 if let taskDidSendBodyData = taskDidSendBodyData {
0365 taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalBytesExpectedToSend)
0366 } else {
0367 progress.totalUnitCount = totalBytesExpectedToSend
0368 progress.completedUnitCount = totalBytesSent
0369
0370 uploadProgress?(bytesSent, totalBytesSent, totalBytesExpectedToSend)
0371 }
0372 }
0373 }
0374 }
0375