我在从图库中选择文件/从相机捕获文件后尝试上传文件,但它为文件路径提供了错误域=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)
我希望如果有人可以帮助我了解这里的问题,我搜索了有人说这是缓存路径而不是本地路径,但所有代码都只是提供了这种获取路径的方式!
感谢提前。