NSURLSession with backgroundSessionConfiguration和multipart / form-data request

时间:2016-03-27 04:20:08

标签: ios multipartform-data nsurlsession

我正在尝试使用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]]

0 个答案:

没有答案