如何使用 REST API 从 Parse.com 下载文件?

Posted

技术标签:

【中文标题】如何使用 REST API 从 Parse.com 下载文件?【英文标题】:How to download the file from Parse.com using the REST API? 【发布时间】:2015-12-20 01:42:53 【问题描述】:

我在Parse.com file download question 找到了这个问题,但是,它只提到可以从 URL 下载文件。此外,Parse.com REST Documentation 仅讨论上传文件并与对象关联。

我尝试仅访问 URL,但它返回错误。

任何人都可以提供 Swift 中的示例并使用 REST API,在查询对象后获取 URL 后如何下载实际文件?

这是我得到的错误:

Error Domain=NSURLErrorDomain Code=-1100 "The requested URL was not found on this server." UserInfo=NSUnderlyingError=0x7fa39940dcc0 Error Domain=kCFErrorDomainCFNetwork Code=-1100 "(null)"

这是我在 Swift 2.0 中的代码:

func downloadFile()
    let str = "http://files.parsetfss.com/c426b506-44da-447d-91d0-93f13980758b/tfss-127e50c4-be6e-4228-b1a3-3f253358ac24-pic.jpg"
    let request = NSMutableURLRequest()
    request.HTTPMethod = "GET"
    request.addValue(appID, forHTTPHeaderField:  "X-Parse-Application-Id")
    request.addValue(apiKey, forHTTPHeaderField: "X-Parse-REST-API-Key")

    let url = NSURL(fileURLWithPath: str)
    request.URL = url

    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithRequest(request, completionHandler: 
        (data, response, error) in
        if (error == nil) 
            do 
                let image = try NSJSONSerialization.dataWithJSONObject(data!, options: [])
             catch 

            
        
    )
    task.resume()

这是我在查询对象时得到的 JSON 响应,并且需要使用 url 才能获取文件:

"picture": 
"__type" = File;
name = "tfss-127e50c4-be6e-4228-b1a3-3f253358ac24-pic.jpg";
url = "http://files.parsetfss.com/c426b506-44da-447d-91d0-93f13980758b/tfss-127e50c4-be6e-4228-b1a3-3f253358ac24-pic.jpg";

【问题讨论】:

硬编码这样的 URL 似乎有风险,特别是因为 Parse 最终是一个可以任意调整文件和其他位和字节的数据库。当您通过网站仪表板查看 Parse 表时,您现在可以在文件列中找到该 URL 吗?该 URL 可能已经过时了。 该 URL 仅针对这个问题进行了硬编码,因为我不想发布太多代码只是为了得到答案。我首先将文件上传到/1/files/,然后将文件名与Class表关联,所以在仪表板上,您只能看到指针,因此它实际上并没有存储在对象的表中。然后我发送一个 GET 请求来获取对象信息。我现在在上面,当我查询对象时,JSON 包含您需要下载的图像 URL。刚刚检查过,在我再次查询对象后,URL 是相同的。我将在我的问题下方发布 JSON。 【参考方案1】:

我敢打赌你的问题出在这一行:

let url = NSURL(fileURLWithPath: str)

"str" 是一个远程 URL,而不是本地文件路径,该 API 试图从您提供的字符串创建一个本地 "file:///" url。

为什么不这样做:

let url = NSURL(string: str)

看看效果好不好?

【讨论】:

谢谢,迈克尔,这绝对是问题所在!现在工作。我还有另一个问题 - 当我最初上传文件时,当我将图像投射到 NSData 时,NSJSONSSerializaion 会抛出错误,所以我编码为 base64EncodedString,它可以工作。现在,当我在 NSData 中获取图像时,它不会显示图像。我尝试了 UIImage(data: data),还尝试编码到 base64String,返回到 NSData,然后到 UIImage,但仍然无法正常工作。上传和下载最有用的格式是什么? 这实际上是一个与您刚刚解决的问题完全不同的问题,您应该在Stack Overflow 上发布一个新问题,因为我们应该在每个问题的范围内。

以上是关于如何使用 REST API 从 Parse.com 下载文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 2.0 在 Parse.com (REST API) 中上传图像并将其与用户关联

Parse Server - 如何在 Heroku 上启用 REST API 密钥

添加和查询指针不适用于 Parse.com 的 REST API

如何启用解析服务器rest api

如何从 Parse.com 获取更多对象以获得无尽的 ListView

Parse.com 从客户端批量保存 (saveAll) 超时