SWIFT - POST图片上传

时间:2015-03-07 01:06:05

标签: ios swift post curl xcode6

我花了很多时间将图像上传到服务器(API调用)并获得JSON响应。

我用curl尝试了这个并且它工作得很完美,但却无法在SWIFT中运行。

基本上这就是我想要做的事情(但在SWIFT中):

curl -X POST -F "file=@test.png" http://www.myurl.com:8000/api

这是我的SWIFT函数,用于执行完全相同的Curl操作:

func sendImagePOST(myimage : UIImage!){
var imageData = UIImagePNGRepresentation(myimage)
//I have also tried this version UIImageJPEGRepresentation(myimage, 1.0)

if imageData != nil{
    var session = NSURLSession.sharedSession()
    var boundary = NSString(format: "---------------------------1940928093901861121640280121")
    var contentType = NSString(format: "multipart/form-data; boundary=%@",boundary)

    var request = NSMutableURLRequest(URL: NSURL(string:"http://www.myurl.com:8000/api")!)
    request.HTTPMethod = "POST"
    request.addValue(contentType, forHTTPHeaderField: "Content-Type")

    var body = NSMutableData.alloc()
    body.appendData(NSString(format: "\r\n--%@\r\n", boundary).dataUsingEncoding(NSUTF8StringEncoding)!)
    body.appendData(NSString(format:"Content-Disposition: form-data; name=\"file\"; filename=\"pouria.png\"\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)

    body.appendData(NSString(format: "Content-Type: application/octet-stream\r\n\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)
    //i have also tired  Content-Type:image/jpeg   and   Content-Type:image/png

    body.appendData(imageData)
    body.appendData(NSString(format: "\r\n--%@\r\n", boundary).dataUsingEncoding(NSUTF8StringEncoding)!)
    request.HTTPBody = body

    var error: NSError?
    var returnData = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: &error)
    var returnString = NSString(data: returnData!, encoding: NSUTF8StringEncoding)
    println(returnString)
   }
}

我一直从服务器获得400响应:

returnString Optional(<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>The browser (or proxy) sent a request that this server could not understand.</p>
)

我使用“requestb.in”来查看帖子调用和Curl POST调用的标题,SWIFT POST调用是相同的但是正文内容不同(我对两个调用都使用了相同的图像)。

非常感谢你的帮助和时间。非常感谢。

1 个答案:

答案 0 :(得分:-1)

就个人而言,我甚至不会尝试从头开始编写任何代码,以便在IOS上进行最基本的http操作。我建议使用图书馆;可以在这里找到一个非常可靠的:https://github.com/AFNetworking/AFNetworking