学生党还是比较懒,好久没写博客了,当然不是因为不码代码了,项目还在继续做,总之就是懒,休息时间就想干别的了。今天终于又写了。
场景是这样的,公司的项目要上传一个图片,和关于这个图片的描述(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写的写法,有什么不足欢迎指正。