我正在尝试使用NSURLSession
backgroundSessionConfiguration
将视频文件上传到transloadit.com。请求需要multipart/form-data
,请求正文中包含一些参数(API密钥等)。 iOS允许仅从文件uploadTaskWithRequest(request: NSURLRequest, fromFile fileURL: NSURL)
进行后台上传,因此我不能仅使用该文件的NSData,因此transloadit会返回INVALID_FORM_DATA
响应,因为iOS在上传时不会尊重请求正文中的参数文件。我是否可以在没有视频文件数据的情况下配置multipart/form-data
请求,或者可能还有其他一些解决方案?
编辑3/27/16
感谢Rob,在创建临时文件后开始工作。现在我有一个带有“params”键的字典,我在上传时会遇到一些奇怪的行为。在这里,我将其添加到NSMutableData
:
body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"params\"\r\n\r\n")
body.appendString("test\r\n")
body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"\(filePathKey)\"; filename=\"\(fileName)\"\r\n")
body.appendString("Content-Type: \(mimeType)\r\n\r\n")
body.appendData(fileData)
body.appendString("\r\n")
body.appendString("--\(boundary)--\r\n")
appendString
是一个辅助函数,它基本上是string.dataUsingEncoding(NSUTF8StringEncoding)
上传过程变成无限循环。只要我将params
更改为其他内容,上传工作就会毫无问题。理想情况下,我需要在请求正文中发送以下字典:
let auth = ["auth": ["key": "****", "expires": ""]]
let notifyURL = ["notify_url": "http://callback_url"]
let parameters: [String: AnyObject] = ["params": [auth, notifyURL]]