如何使用 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 中获取错误消息?

如何使用swift 2.0更改UITextfield占位符颜色和fontsize?

如何在 swift 2.0 中使用 AttributesOfFileSystemForpaths 获取总磁盘空间和可用磁盘空间

如何在 Swift 2.0 中正确解开这些 CLPlacemarks?

如何使用 swift 2.0 制作 http post json 请求参数

如何在 Swift 2.0 中使用标签将 TextField 添加到 Cell