【问题标题】:NSURL to NSDATA or Data is always nilNSURL 到 NSDATA 或 Data 总是 nil
【发布时间】:2017-04-23 20:19:41
【问题描述】:

我正在尝试通过 Alamofire 将视频上传到服务器文件,但我无法获取将要传递的“数据”..它始终为零

    var videoURL = NSURL(string: "")
   //returns Optional(file:///private/var/mobile/Containers/Data/Application/1FB40086-228B-4011-A9D4-7874E2EEF9F4/tmp/4A6AAD76-B899-4B67-8E96-925DA4AE9E93.mov)


    let videodata =  NSData(contentsOfFile: (videoURL?.absoluteString)!)
    //nil  
    let url = NSURL(fileURLWithPath: (videoURL?.absoluteString)!)

    let videodata = NSData(contentsOf: url as URL)
    //nil

如果我得到数据会引导我这样做:

 Alamofire.upload(multipartFormData: { multipartFormData in
                multipartFormData.append (videodata as! Data, withName: "file", fileName: "file.mov", mimeType: "video/quicktime")
enter code here

编辑::

谢谢你们,在你们的帮助下,我一直在努力摆脱找不到此文件的错误,但我可以看到该文件正在保存在我的画廊中,任何线索都可以挽救我的一天。

      print (videoURL!)
//returns file:///private/var/mobile/Containers/Data/Application/3F280477-DA16-4A67-AE60-D6247143352E/tmp/1E4AC002-6AD0-41E1-9E0D-A09B697F81F7.mov


       print (videoURL!.path!)
      // returns /private/var/mobile/Containers/Data/Application/3F280477-DA16-4A67-AE60-D6247143352E/tmp/1E4AC002-6AD0-41E1-9E0D-A09B697F81F7.mov


        var videoData = NSData()

        let path = videoURL!.path!
        if FileManager.default.fileExists(atPath: path) {

        }else {
               print("Could not fin file at url: \(videoURL!.path!)")
             // here it throws file not found
        }

【问题讨论】:

  • .absoluteString 不是将 URL 转换为路径的正确方法,比较 stackoverflow.com/questions/34135305/…
  • 是的,什么都试过了……只是用 videoURL 但没用
  • videoUrl 在您的代码中是可选的,因此您需要在放置时打开它!在 videoURL 的末尾!
  • 做到了:|还是一样
  • 所以,在您声明var videoURL 并点击下面的任何一行之后,当您打印它时,它会显示Optional(file:///private/var/mobile/Containers/Data/Application/1FB40086-228B-4011-A9D4-7874E2EEF9F4/tmp/4A6AAD76-B899-4B67-8E96-925DA4AE9E93.mov 吗?当您选择单击 videoURL 时,它显示它是什么类型的对象?可选网址?一个可选的字符串?

标签: ios swift swift3 nsdata


【解决方案1】:

在 Swift 3 中,使用原生 URLData 而不是 NSURLNSData

if let videoURL = URL(string: urlString), let videodata = try? Data(contentsOf: videoURL) {
     //Add code of Alamofire here
}

【讨论】:

    【解决方案2】:

    使用absoluteString 会返回一个以file:// 开头的字符串,而您不希望这样。需要返回URL的路径

    guard let videoPathString = videoURL.path as? String else {
      //handle error here if you can't create a path string
      return
    }
    
    var videoData = NSData()
    
    //check if file exists at this path first 
    if (NSFileManager.defaultManager().fileExistsAtPath(videoPathString)) {
      videoData = NSData(contentsOfFile: NSString(videoPathString))
    } else {
      //if file does not exist at that path, handle here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      • 2016-02-15
      • 2017-03-08
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      相关资源
      最近更新 更多