【发布时间】:2016-09-22 19:05:47
【问题描述】:
我正在创建基于NSURL 的URL,然后使用NSURLSession 将文件发送到REST API(self.prefix 是一个类似于
/var/mobile/Applications/39FEBF47-6B74-48F2-8484-638D4B79A5FC/Documents/app/s7UqOoLJcI7tUCB/file.png)。
let UUID: String = "'UUID:" + (randomStringWithLength(32) as String) + "' "
let ContentType: String = "Content-Type:image/png < "
let str: String = "http://link/convert 'X-Auth-Token:a351sfddsf2cbcce8' 'X-Project-ID:2222' " + UUID + ContentType + self.prefix
let url = NSURL(string: str)
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
print(NSString(data: data!, encoding: NSUTF8StringEncoding))
}
task.resume()
我来了
"致命错误:在展开 Optional 时意外发现 nil 价值”
因为 URL 为零。我应该怎么做才能正确构建与 REST API 通信的 URL?
这是与 API 交互在命令行中的样子:
http 链接:80/action 'X-Auth-Token:a3s33cfeffswffffs5454534bcce8' 'X-Project-ID:1234' 'UUID:abcdef123456' 内容类型:image/jpg
我目前创建了一个如下所示的 HTTP 请求,但看不到任何响应。
self.currentImage.image = tempImage
let body = NSMutableData()
let boundary = generateBoundaryString()
let fname = self.prefix
let mimetype = "image/png"
let imageData: NSData = UIImagePNGRepresentation(self.currentImage.image!)!
let UUID: String = randomStringWithLength(12) as String
let url = NSURL(string: "http://aaaa/bbb")!
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.setValue("image/png", forHTTPHeaderField: "Content-Type")
request.setValue("aa", forHTTPHeaderField: "X-Auth-Token")
request.setValue("aaa", forHTTPHeaderField: "X-Project-ID")
request.setValue(UUID, forHTTPHeaderField: "UUID")
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Disposition:form-data; name=\"test\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("hi\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Disposition:form-data; name=\"file\"; filename=\"\(fname)\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Type: \(mimetype)\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData(imageData)
body.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("--\(boundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
request.HTTPBody = body
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request) { data, response, error in
if let response = response, data = data {
print(String(data: data, encoding: NSUTF8StringEncoding))
}
}
task.resume()
【问题讨论】:
-
请举例说明什么是有效的 URL。您的“在命令行中”示例不是有效的 URL。
-
@EricD 在命令行示例中与 url 的交互是 http (github.com/jkbrzt/httpie) 并且只有 url -- url 从 link:80 开始。因此,例如 abc/action 'X-Auth-Token:a3513cf345345345' 'X-Project-ID:845c3' 'UUID:abcdef123456' Content-Type:image/png
-
这不是一个URL,这是一个带参数的命令行。
-
@EricD sth.com/action 'X-Auth-Token:a3513cfesdfsdfsdf' 'X-Project-ID:8413' 'UUID:ase56' Content-Type:image/png
标签: ios swift rest nsurlsession nsurl