ios - 在快速选择/捕获后获取文件路径给出错误域=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)
我希望如果有人可以帮助我了解这里的问题,我搜索了有人说这是缓存路径而不是本地路径,但所有代码都只是提供了这种获取路径的方式!
感谢提前。
解决方案
原因: 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
推荐阅读
- postgresql - 为 RHEL 8 设置 ODBC,出现错误 [IM002][unixODBC]Missing database name in call to CC_connect
- python - 如何将给定数据的输出转换为字典格式?
- jquery - 我的上下文相关 useEffect 钩子仅在第一次调用时触发
- amazon-ec2 - Aws Ec2 与 VPN 的反向连接
- javascript - 使用 jQuery 来操作一个组合的 HTML 页面?
- javascript - For Loop Javascript ScrollTo.Document 项目在重构后不起作用
- javascript - 添加区域后上传编辑器图像
- swift - 在 SwiftUI (iPadOS) 中获取移动指针的坐标
- html - 阻止伪元素扩展窗口的高度
- python - 我需要用多线程的 API 调用结果填充一个列表