使用 Alamofire 从 UIImagePickerController 上传图像

Posted

技术标签:

【中文标题】使用 Alamofire 从 UIImagePickerController 上传图像【英文标题】:Uploading an image from UIImagePickerController using Alamofire 【发布时间】:2015-09-21 20:57:36 【问题描述】:

我正在尝试使用 Alamofire 将图像上传到服务器。当我使用以下内容时,一切都可以正常使用保存在包中的测试图像。

    func uploadImage()

    let fileURL = NSBundle.mainBundle().URLForResource("Uploadtest", withExtension: "jpg")
    Alamofire.upload(.PUT, url + "/api/Image" + id, file: fileURL!).responseString 
        _, _, result in
        print("Success: \(result.isSuccess)")
        print("Response String: \(result.value)")
    

但是,我希望从 UIImagePickerController 上传图像。 Alamofire 上传方法将文件 url 作为参数,而我从 UIImagePickerController 获取 UIImage 的实例。我是否应该将此图像本地保存到文档或类似文件中,然后获取该位置的 url 以传递给 Alamofire 上传方法?这是可能的还是我错过了另一种方式?

【问题讨论】:

在您的UIImagePickerDelegate 中,您需要使用可选的 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) 返回给您的信息字典有一个键,它应该满足您的需求UIImagePickerControllerMediaURL 感谢 JMFR 看起来不错,但由于某种原因 info 中没有任何值。我敢肯定那是我做错了! 我认为您可能是对的,最好的方法是保存本地副本。然后上传那个。 (我猜这是因为沙盒,我们不能只在照片应用程序中获取文件的 url。因为它们有自己的数据目录,与我们的应用程序数据分开。) 写下您自己问题的答案。我会给它一个 :thumbsup: 会做的,谢谢你的帮助。 【参考方案1】:

最后我做了以下工作。

    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])

    if let imageURL = info[UIImagePickerControllerReferenceURL]
    
        print(imageURL)
        Alamofire.upload(.PUT, url + "/api/Image/" + id, file: imageURL).responseString 
            _, _, result in
            print("Success: \(result.isSuccess)")
            print("Response String: \(result.value)")
        
    

    dismissViewControllerAnimated(true, completion: nil)

【讨论】:

以上是关于使用 Alamofire 从 UIImagePickerController 上传图像的主要内容,如果未能解决你的问题,请参考以下文章

使用 Alamofire 从 API 获取数据时出错

使用 Alamofire 从 Firebase 检索 JSON

UIImagePickerController 从相机拍照 - 默认为正方形

使用 Alamofire 从 url 下载后确定文件类型

Alamofire 从 POST 获得响应

使用 alamofire 下载图像 - iOS