<Swift>iOS实现单张图片混带其他参数共同上传

学生党还是比较懒,好久没写博客了,当然不是因为不码代码了,项目还在继续做,总之就是懒,休息时间就想干别的了。今天终于又写了。

 场景是这样的,公司的项目要上传一个图片,和关于这个图片的描述(String类型)以及这个图片的ID(Int)类型。后台给了一个接口上传这些数据。之前这个功能做的时候是三个接口,分别接收这三个参数。下面贴代码。

 func postPicture(paramer:NSDictionary,fileData:NSData,fileName:NSString){
<span style="white-space:pre">	</span>//第一个参数是存储id和描述的一个字典  第二个参数是一个图片的NSData形式 第三个参数是图片名称

        var url = "http://your url"
        //根据url 初始化requset
        let request = NSMutableURLRequest(URL:NSURL(string: url)!)
        
        let Boundary:NSString = "*****"
        //分界线
        let MPBoundary = NSString(format:"--%@",Boundary)
        //结束符
        var EndBoundary = NSString(format:"%@--",MPBoundary)
        let body = NSMutableString()
        let requestData = NSMutableData()
        
<span style="white-space:pre">	</span>//拼接第一个参数
        body.appendFormat("%@\r\n",MPBoundary)
<span style="white-space:pre">	</span>//name后是字典的key 也就是服务器接口的接收键值
        body.appendFormat("Content-Disposition: form-data; name=\"page_id\"\r\n\r\n")
        body.appendFormat("\(paramer["page_id"] as! NSInteger)\r\n")
        
<span style="white-space:pre">	</span>//拼接第二个参数
        body.appendFormat("%@\r\n",MPBoundary)
        body.appendFormat("Content-Disposition: form-data; name=\"page_desc\"\r\n\r\n")
        body.appendFormat("\(paramer["page_desc"] as! NSString)\r\n")
        
        //拼接图片
        body.appendFormat("%@\r\n",MPBoundary)
        body.appendString("Content-Disposition: form-data; name=\"error_pic\";filename=\"\(fileName)\"\r\n")
<span style="white-space:pre">	</span>//图片类型
        body.appendString("Content-Type: image/png\r\n\r\n")
        EndBoundary = NSString(format: "\r\n%@\r\n", EndBoundary)

        requestData.appendData(body.dataUsingEncoding(NSUTF8StringEncoding)!)
        
        requestData.appendData(fileData)
        requestData.appendData(EndBoundary.dataUsingEncoding(NSUTF8StringEncoding)!)
<span style="white-space:pre">	</span>//请求方式
        request.HTTPMethod = "POST"
        request.setValue("multipart/form-data; boundary=\"*****\"; charset=\"UTF-8\"", forHTTPHeaderField: "Content-Type")
        request.setValue("\(requestData.length)", forHTTPHeaderField: "Content-Length")
        request.HTTPBody = requestData

        let session = Manager.sharedInstance.session
        let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in
                    do {
                        if data != nil {
                            let httpResponse = response as! NSHTTPURLResponse
                            if httpResponse.statusCode == 200 {
                                let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
<span style="white-space:pre">			</span>//此处不同后台返回值不同
                                let status = json.objectForKey("code") as! String
                                if status == "0000" {
                                    //上传成功
                                
                                }
                            }
                        }else{

                        }
                    }catch {
                        return
                    }
                }
                task.resume()
}

功能实现了。我是参照前辈用OC写的写法,有什么不足欢迎指正。

附OC的地址:http://blog.sina.com.cn/s/blog_a573f7990101fdm7.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值