尝试运行任务时,发送图像,收到错误代码=13“查询已取消”
Posted
技术标签:
【中文标题】尝试运行任务时,发送图像,收到错误代码=13“查询已取消”【英文标题】:When trying to run a task, sending an image, getting error Code=13 "query cancelled" 【发布时间】:2018-10-12 11:12:44 【问题描述】:我目前正在使用 ios 应用程序的图像选择器从相机角色中获取图片,然后尝试将其发送到 Web 服务器上的 php 脚本以将图像保存到另一端。
但是,当task.resume()
这行代码运行时,会抛出这个错误:
发现扩展时遇到[discovery] 错误:Error Domain=PlugInKit Code=13 "query cancelled" UserInfo=NSLocalizedDescription=query cancelled
发生这种情况后,图像也不会保存在目的地。
我已阅读有关此错误的其他几篇帖子,并尝试使用@objc
将didFinishPickingMediaWithInfo
暴露给objective-c。
我已在 plist 中分配了隐私 - 照片库使用说明。我还允许任意加载。
尽管如此,错误仍然存在,所以如果有人能发现我的代码有任何问题,那将有很大帮助。我还将添加 PHP 脚本,以便您查看数据发送到的位置,谢谢。
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, URLSessionDelegate, URLSessionTaskDelegate, URLSessionDataDelegate
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var uploadButton: UIButton!
@IBOutlet weak var progressView: UIProgressView!
@IBOutlet weak var progressLabel: UILabel!
override func viewDidLoad()
super.viewDidLoad()
checkPermission()
func checkPermission()
let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus()
switch photoAuthorizationStatus
case .authorized:
print("Access is granted by user")
case .notDetermined:
PHPhotoLibrary.requestAuthorization(
(newStatus) in
print("status is \(newStatus)")
if newStatus == PHAuthorizationStatus.authorized
/* do stuff here */
print("success")
)
print("It is not determined until now")
case .restricted:
// same same
print("User do not have access to photo album.")
case .denied:
// same same
print("User has denied the permission.")
@IBAction func uploadTapped(_ sender: UIButton)
let pickerController = UIImagePickerController()
pickerController.delegate = self
pickerController.sourceType = UIImagePickerController.SourceType.photoLibrary
self.present(pickerController, animated: true, completion: nil)
@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])
imageView.image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
imageView.backgroundColor = UIColor.clear
self.dismiss(animated: true, completion: nil)
uploadImage()
func uploadImage()
let imageData = imageView.image!.jpegData(compressionQuality: 1)
if imageData == nil
return
self.uploadButton.isEnabled = false
let uploadScriptURL = NSURL(string: "I've removed the URL for this question, but a valid URL to the PHP goes here")
var request = URLRequest(url: uploadScriptURL! as URL)
request.httpMethod = "POST"
request.setValue("Keep-Alive", forHTTPHeaderField: "Connection")
let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration, delegate: self, delegateQueue: OperationQueue.main)
let task = session.uploadTask(with: request, from: imageData!)
print(imageData!)
task.resume()
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?)
let alert = UIAlertController(title: "Alert", message: error?.localizedDescription, preferredStyle: .alert)
self.present(alert, animated: true, completion: nil)
self.uploadButton.isEnabled = true
func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64)
let uploadProgress:Float = Float(totalBytesSent) / Float(totalBytesExpectedToSend)
progressView.progress = uploadProgress
let progressPercent = Int(uploadProgress * 100)
progressLabel.text = "\(progressPercent)%"
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Void)
self.uploadButton.isEnabled = true
PHP 脚本:
<?php
$target_dir = "uploads";
if(!file_exists($target_dir))
mkdir($target_dir, 0777, true);
$target_dir = $target_dir . "/" . basename($_FILES["file"]["name"]);
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_dir))
echo json_encode([
"Message" => "The file ". basename( $_FILES["file"]["name"]). " has been uploaded.",
"Status" => "OK"
]);
else
echo json_encode([
"Message" => "Sorry, there was an error uploading your file.",
"Status" => "Error"
]);
【问题讨论】:
请求实际上是从 iOS 发出的,你看到progressLabel
更新了吗?
@DávidPásztor progressLabel
得到更新,从 0% 到 100%,而 progressView
也相应更新。
我也明白了,尽管一切正常。我希望我能解释发生了什么,但我不能相反,如果你在这里查看第二个答案:***.com/questions/44465904/… 你会找到一种在控制台中压制它的方法。 (并且对此答案的评论与我一致,它没有解释它是什么。我通常会启用此变量,直到我完成并想要存档/上传到 App Store。我有两个应用程序被接受 - 和我相信这是 Xcode 9 开始出现的。
@dfd 所以这个错误不会影响你的任何进程?如果是这种情况,它可能与我的图像无法保存的问题无关。我会仔细检查服务器端的所有内容,谢谢。
具体来说,我使用的是UIImagePickerController
,一切正常。解雇它时我得到这个“错误”。我目前正在浏览我发布的链接中的所有答案,但到目前为止都没有奏效。
【参考方案1】:
所以事实证明我的问题不是由这个错误引起的,而且似乎该错误实际上对代码没有任何影响 - 似乎可以忽略它。
就我而言,由于我的疏忽,代码无法正常工作。我尝试发送的图像为 2.2MB,但我没有意识到它返回了 html 错误代码 413,因为我正在测试的服务器上的上限为 2MB。
如果您遇到此类任务失败的问题,请确保在 urlSession 的 didReceive response
函数中打印出 response
。这样您就可以检查返回的任何 HTML 错误。
【讨论】:
以上是关于尝试运行任务时,发送图像,收到错误代码=13“查询已取消”的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试提交表单以存储某些值和上传图像的路径到数据库时,我收到[对象引用未设置...]的错误[复制]
为啥我在尝试从 C# 处理程序发布 GraphQL 查询时收到错误请求?