首页 > 解决方案 > 在快速选择/捕获后获取文件路径给出错误域=nscocoaerrordomain code=260

问题描述

我在从图库中选择文件/从相机捕获文件后尝试上传文件,但它为文件路径提供了错误域=nscocoaerrordomain code=260,我不确定为什么会出现此错误以及它是否与真正未找到的文件路径有关,如果是这样,那么我们走的路是什么

//来自画廊

       self.selectedImageURL = "\(info[UIImagePickerController.InfoKey.imageURL]!)"

//来自相机

if let originalImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage{
            self.profileImage.image = originalImage

            let imgName = UUID().uuidString
            let documentDirectory = NSTemporaryDirectory()
            let localPath = documentDirectory.appending(imgName)

            let data = originalImage.jpegData(compressionQuality: 0.3)! as NSData
                                  data.write(toFile: localPath, atomically: true)
            let photoURL = URL.init(fileURLWithPath: localPath)


            selectedImageURL = "\(photoURL)"

            print("url is \(selectedImageURL)")


        }

获取 URL 的示例:file:///private/var/mobile/Containers/Data/Application/F0A1163F-B8E4-43CA-BE70-3FF0218FB328/tmp/61E3FCBA-1A45-4A53-8877-A9392DACEFD4.jpeg

图片上传代码:

    let parameters = [
      [
        "key": "avatar",
        "src": urlOfImage,
        "type": "file"
      ],
      [
        "key": "user_id",
        "value": UserDefaults.standard.getUserID(),
        "type": "text"
      ]] as [[String : Any]]

    let boundary = "Boundary-\(UUID().uuidString)"
    var body = ""
    var error: Error? = nil
    for param in parameters {
      if param["disabled"] == nil {
        let paramName = param["key"]!
        body += "--\(boundary)\r\n"
        body += "Content-Disposition:form-data; name=\"\(paramName)\""
        let paramType = param["type"] as! String
        if paramType == "text" {
          let paramValue = param["value"] as! String
          body += "\r\n\r\n\(paramValue)\r\n"
        } else {
          let paramSrc = param["src"] as! String

            do{
                let fileData = try NSData(contentsOfFile:paramSrc, options:[]) as Data

                let fileContent = String(data: fileData, encoding: .utf8)!
                body += "; filename=\"\(paramSrc)\"\r\n"
                  + "Content-Type: \"content-type header\"\r\n\r\n\(fileContent)\r\n"
            }catch
                {

                   //it gives error here for this file path doesn't exist
                    print(error)
            }

        }
      }
    }
    body += "--\(boundary)--\r\n";
    let postData = body.data(using: .utf8)

    var request = URLRequest(url: URL(string: my_url)!,timeoutInterval: Double.infinity)
    request.addValue(UserDefaults.standard.getUserToken(), forHTTPHeaderField: "x-access-token")

    request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

    request.httpMethod = "POST"
    request.httpBody = postData

    doParsingUpload(request: request)

我希望如果有人可以帮助我了解这里的问题,我搜索了有人说这是缓存路径而不是本地路径,但所有代码都只是提供了这种获取路径的方式!

感谢提前。

标签: iosswiftiphoneios13.4

解决方案


原因: NSFileReadNoSuchFileError = 260, // Read error (no such file)

解决方案:确保文件存在,在终端上运行:

[ -e /{path-to-file}/{file-name}.{file-extension} ] && echo "File exists" || echo "File does not exist"

看看它是否返回File exists


推荐阅读