swift实现http上传

//
//  ViewController.swift
//  http请求
//
//  Created by admin on 16/2/26.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.uploadFile()
    }
    func uploadFile()
    {
        let urlStr = "http://test.com/upload.php"
        let url = NSURL(string: urlStr.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)

        var request = NSMutableURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringCacheData, timeoutInterval: 10)
        // 设置上传文件所需要的信息
        self.setUploadRequest(&request,filePath: NSBundle.mainBundle().pathForResource("2.jpg", ofType: nil)!)

        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue()) { (response: NSURLResponse?, data:NSData?, error:NSError?) -> Void in
            let json:AnyObject? = try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
            print(json)
        }
    }
    // 设置上传文件的头
    func setUploadRequest(inout request:NSMutableURLRequest,filePath:String)->NSMutableURLRequest
    {
        let seperator = "jin"
        // 设置请求类型
        request.HTTPMethod = "post"
        // 设置http头
        // Content-Type multipart/form-data; boundary(分隔符)=(可以随便写, 但是不能有中文)
        let header = "multipart/form-data; boundary=\(seperator)"
        request.setValue(header, forHTTPHeaderField: "Content-Type")

        // 拼接数据
        let bodyData = NSMutableData()
        // \r\n--(可以随便写, 但是不能有中文)\r\n
        var str = "\r\n--\(seperator)\r\n"
        bodyData.appendData(str.dataUsingEncoding(NSUTF8StringEncoding)!)

        // Content-Length(文件的大小)    这个不用写
        // Content-Disposition: form-data; name="userfile(php脚本中用来读取文件的字段)"; filename="demo.json(要保存到服务器的文件名)"\r\n
        str = "Content-Disposition: form-data; name=\"uploadFile\"; filename=\"newFile.jpg\"\r\n"
        bodyData.appendData(str.dataUsingEncoding(NSUTF8StringEncoding)!)

        // Content-Type: application/octet-stream(上传文件的类型)\r\n\r\n
        str = "Content-Type: application/octet-stream\r\n\r\n"
        bodyData.appendData(str.dataUsingEncoding(NSUTF8StringEncoding)!)

        // 要上传的文件的二进制流
        let fileData = NSData(contentsOfFile: filePath)
        bodyData.appendData(fileData!)

        // \r\n--(可以随便写, 但是不能有中文)--\r\n
        str = "\r\n--\(seperator)--\r\n"
        bodyData.appendData(str.dataUsingEncoding(NSUTF8StringEncoding)!)
        request.HTTPBody = bodyData
        return request
    }
}

标签: swift, 网络

添加新评论