2016-06-07 60 views
3

我试图抓取通过imagePickerController选择的图像的文件路径,以便将文件上传到Firebase存储。从UIImagePickerController获取NSURL

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

    mediaUploadView.image = info[UIImagePickerControllerOriginalImage] as? UIImage 

    let localUrl: NSURL = (info[UIImagePickerControllerReferenceURL] as! NSURL) 
    print(localUrl) 

    let localFile: NSURL = localUrl 
    let mediaRef = storageRef.child("media") 

    let uploadTask = mediaRef.putFile(localUrl, metadata: nil) { metadata, error in 
     if (error != nil) { 
     } else { 
      let downloadURL = metadata!.downloadURL 
     } 
    } 


    self.dismissViewControllerAnimated(true, completion: nil) 

} 

输出写着:

assets-library://asset/asset.JPG?id=C224DA06-6B7B-4BE2-8F5E-2EC7BC8B0526&ext=JPG 
Body file is unreachable: /asset.JPG 
Error Domain=NSCocoaErrorDomain Code=4 "The file doesn’t exist." 

它抓住了我认为是NSURL,但随后无法找到它上传。

我已经试图跟随堆栈“How do I get Image reference and upload image to Firebase?”上的这个类似的问题,但输出然后简单地返回零。 任何帮助将是伟大的,谢谢!

回答

2

我无法使info[UIImagePickerControllerOriginalImage]正常工作。我必须这样做:

let assets = PHAsset.fetchAssetsWithALAssetURLs([localUrl], options: nil) 
let asset = assets.firstObject 
asset?.requestContentEditingInputWithOptions(nil, completionHandler: { (contentEditingInput, info) in 
    let imageFile = contentEditingInput?.fullSizeImageURL 
    // now call putFile with imageFile instead of localURL 
+0

感谢您的回复Sharud!花了我一秒拿到它,但现在它的工作!我一直试图获得这个近5天,所以我甚至不能告诉你我有多兴奋。再次,谢谢你!巨大的帮助! – BriceSwift

+0

耶!很高兴我能帮上忙。你让我获得了50的声望,所以我现在可以评论:)所以我们互相帮助了哈哈。无论如何,最初的'localURL'是Photos App资源的一个网址。那么你需要把它作为一个资产url来获取。永远不能完全弄清楚为什么我不得不通过编辑来请求它,但这是我能够实现它的唯一方法。 –

+0

很高兴我能帮助你太哈哈!我很欣赏这个解释,我对编码很陌生,所以很多东西都在我的头上。内容编辑似乎很奇怪,但只要它完成了工作,我很高兴!有一个好男人! – BriceSwift