如何使用 Swift 2.0 在 Parse.com (REST API) 中上传图像并将其与用户关联
Posted
技术标签:
【中文标题】如何使用 Swift 2.0 在 Parse.com (REST API) 中上传图像并将其与用户关联【英文标题】:How to upload and associate an Image with a User in Parse.com (REST API), using Swift 2.0 【发布时间】:2015-12-17 11:01:10 【问题描述】:我正在尝试使用 REST API 将图像或文件与 Parse.com 中的对象相关联。 Parse.com REST API Doc 比较模糊,先讲怎么上传哪个好,再讲怎么关联。唯一的问题是它没有显示如何与User table
关联,只有Object table
,所以当我尝试与用户关联时,它要求输入用户名和密码,并且响应好像它尝试创建一个新的user
。当我尝试与常规表 Company
关联时,它会创建一个新条目。欢迎任何帮助,这是我到目前为止的代码。
这是使用 REST 将文件上传到 Parse.com 的代码
let baseURL = NSURL(string: self.baseURL)
let url = NSURL(string: "/1/files/pic.jpg", relativeToURL: baseURL)
let request = NSMutableURLRequest()
request.HTTPMethod = "\(HTTPMethod.POST)"
request.addValue(appID, forHTTPHeaderField: "X-Parse-Application-Id")
request.addValue(apiKey, forHTTPHeaderField: "X-Parse-REST-API-Key")
request.addValue("image/jpeg", forHTTPHeaderField: "Content-Type")
let image = UIImage(named: "empAvatar")
let imageData = UIImageJPEGRepresentation(image!, 0.9)
let base64String = imageData!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
let param = ["userProfile":base64String]
do
request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(param, options: .PrettyPrinted)
catch
print("ERROR: HTTP Body JSON")
request.URL = url
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request)
data, response, error in
do
let imageDic = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as! [String:AnyObject]
print("DATA: \(imageDic)")
catch
task.resume()
这是将文件与用户/对象关联的代码
let baseURL = NSURL(string: self.baseURL)
let url = NSURL(string: "/1/users/", relativeToURL: baseURL)
let request = NSMutableURLRequest()
request.HTTPMethod = "\(HTTPMethod.POST)"
request.addValue(appID, forHTTPHeaderField: "X-Parse-Application-Id")
request.addValue(apiKey, forHTTPHeaderField: "X-Parse-REST-API-Key")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
let param = ["name":"John", "picture":["name":"tfss-127e50c4-be6e-4228-b1a3-3f253358ac-pic.jpg","__type":"File"]]
do
request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(param, options: .PrettyPrinted)
catch
print("ERROR: HTTP Body JSON")
request.URL = url
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request)
data, response, error in
do
let imageDic = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as! [String:AnyObject]
print("DATA: \(imageDic)")
catch
task.resume()
用网址,我也试过了:
let url = NSURL(string: "/1/class/Company/", relativeToURL: baseURL)
它刚刚创建了一个新条目。
谢谢!
【问题讨论】:
【参考方案1】:POST
请求将创建新条目尝试改用PUT
方法。
【讨论】:
还是不行。我改为 PUT,它当然请求我提供的 objectId,但它返回 400 错误,["error": Cannot update without a specific object id] 在这里:让 url =NSURL(string: "/1/users/", relativeToURL: baseURL)
你应该添加用户的objectId
。
非常感谢@njuri。您为我指出了正确的方向,我能够解决它。我必须使用 sessionToken 创建更新并且它有效!谢谢..
文件下载后无法下载,请问知道使用网址下载最简单的方法吗?这是我刚刚发布的问题:***.com/questions/34377205/…以上是关于如何使用 Swift 2.0 在 Parse.com (REST API) 中上传图像并将其与用户关联的主要内容,如果未能解决你的问题,请参考以下文章
如何使用swift 2.0更改UITextfield占位符颜色和fontsize?
如何在 swift 2.0 中使用 AttributesOfFileSystemForpaths 获取总磁盘空间和可用磁盘空间
如何在 Swift 2.0 中正确解开这些 CLPlacemarks?