繁体   English   中英

在Swift中的iOS上使用NSURLSession和HTTP REST API

[英]Using NSURLSession with HTTP REST API on IOS in Swift

我正在创建基于NSURLURL ,然后使用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()

我正进入(状态

“致命错误:解开可选值时意外发现nil”

因为网址为零。 我应该怎么做才能正确构造URL以与REST API通信?

这是在命令行中与API交互的外观:

http链接:80 / action'X-Auth-Token:a3s33cfeffswffffs5454534bcce8''X-Project-ID:1234''UUID:abcdef123456'内容类型:image / jpg <〜/ Downloads / file.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()

我认为这里有些错误...

1 /您建立的网址没有网址...您要建立的是带有标头的请求。 而是这样做:

let url = NSURL(string: "http://link.com/convert")!

let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.setValue("image/png", forHTTPHeaderField: "Content-Type")
request.setValue("a351sfddsf2cbcce8", forHTTPHeaderField: "X-Auth_Token")
request.setValue("2222", forHTTPHeaderField: "X-Project-ID")

然后创建NSURLSession

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()

注意:我尚未将您的self.prefix添加到URL中……您可能需要将其放入请求的有效负载中或某些内容中……但这将解决您的URL nil问题,这是进行POST的一种简洁方法请求REST API

您的网址链接http://link/convert无效

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM