0
我试图创建一种采用多一个新的对象和其他一些价值观,但我无法得到它的工作。上传图像和文本值服务器
这是我用没有上传图片的代码(这工作):
let request = NSMutableURLRequest(URL: NSURL(string: self.submitLink)!)
let session = NSURLSession.sharedSession()
let params = [
"article": [
"name" : name,
"description" : fullDescription.text!,
"subdescription" : sDescription,
"category_id" : categoriesArray[self.categoryPicked]["id"] as! Int,
"location_id" : locationsArray[self.locationPicked]["id"] as! Int,
"Xcoordinate" : self.lat,
"Ycoordinate" : self.lng,
"user_id" : User.sharedInstance.userId,
"article_images_attributes[][image]" : ""
]
]
request.HTTPBody = try? NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions())
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.HTTPMethod = "POST"
let task = session.dataTaskWithRequest(request, completionHandler: { data, response, error -> Void in
print("article created.")
})
task.resume()
,这是我用此刻的代码(不工作):
let params = [
"article[name]" : name,
"article[description]" : fullDescription.text!,
"article[subdescription]" : sDescription,
"article[category_id]" : categoriesArray[self.categoryPicked]["id"] as! Int,
"article[location_id]" : locationsArray[self.locationPicked]["id"] as! Int,
"article[Xcoordinate]" : self.lat,
"article[Ycoordinate]" : self.lng,
"article[user_id]" : User.sharedInstance.userId
]
let boundaryConstant = "----------V2ymHFg03ehbqgZCaKO6jy"
let fileParamConstant = "article[article_images_attributes][][image]"
let session = NSURLSession.sharedSession()
let request = NSMutableURLRequest(URL: NSURL(string: self.submitLink)!)
request.HTTPMethod = "POST"
let contentType = "multipart/form-data; boundary=\(boundaryConstant)"
request.setValue(contentType, forHTTPHeaderField: "Content-Type")
let body = NSMutableData()
for param in params {
print(param)
body.appendData("--\(boundaryConstant)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Disposition: form-data; \(param.key)=\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("\(param.value)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
}
let imageData = UIImageJPEGRepresentation(self.photoArray[0], 1)
if imageData != nil {
body.appendData("--\(boundaryConstant)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Disposition: form-data; name=\(fileParamConstant); filename=\"image.jpg\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Type: application/octet-stream\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData(imageData!)
body.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
}
body.appendData("--\(boundaryConstant)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
request.HTTPBody = body
let task = session.dataTaskWithRequest(request, completionHandler: { data, response, error -> Void in
print(request)
print(data)
})
task.resume()
每当我试图提交我的形式服务器回复:
NoMethodError(未定义的方法'名称”的零:NilClass)
所以我认为有什么问题,我定义我的PARAMS的方式吗?有人可以更深入地向我解释一下,所以我知道我做错了什么?
服务器与所述消息回复?你有没有使用像Charles或Wireshark这样的http代理来调查发送的内容? –