使用 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 从 Firebase 检索 JSON