当前位置: 首页 > 知识库问答 >
问题:

使用Alamofire url下载pdf文件响应错误

许俊晤
2023-03-14
class func downloadPdf(pdfReport: String, completion: @escaping (_ error: Error?, _ success: Bool,_ value: String) -> Void) {

    let downloadUrl: String = URLs.pdfFileUrl + pdfReport
    let destination = DownloadRequest.suggestedDownloadDestination()

    print(downloadUrl, destination)
    Alamofire.download(downloadUrl, method: .get, parameters: nil, encoding: JSONEncoding.default, to: destination).responseJSON { response in

        switch response.result {
        case .failure(let error):
            print("error: ", error)
            print(error.localizedDescription)
            completion(error, false, "")
        case .success(let value):
            let json = JSON(value)
            print(json)
            print("successss")
            completion(nil, true, "")
        }
    }
}
func downloadPdf() {
    KRProgressHUD.show(withMessage: NSLocalizedString("wait", comment: "wait"))
    API.downloadPdf(pdfReport: self.report.report){ (error: Error?, success: Bool, result: String) in
        if success {
            KRProgressHUD.dismiss()
        } else {
            KRProgressHUD.dismiss()
            if (!Connectivity.isConnectedToNetwork()){
                Toast.toast(messsage: NSLocalizedString("no internet", comment: "no internet"), view: self.view)
            } else {
                Toast.toast(messsage: NSLocalizedString("error occured", comment: "error occured"), view: self.view)
            }
        }
    }
}

当我第一次调用downloadpdf方法时,它成功地下载了文件,但我得到了以下错误:

https://madrasty.dev.ibtdi.work/public/reports/15287105135b1e4571f2596-new.pdf(函数)错误:responseSerializationFailed(AlamoFire.Aferror.ResponseSerializationFailureRereason.JsonSerializationFailed(错误域=nscocoAerrordomain代码=3840“字符0附近的值无效。”UserInfo={NsDebugDescription=字符0附近的值无效。}))无法序列化JSON,原因是错误:.

如果再次调用该方法,则会出现以下错误:

错误:Error domain=nscocoaerrordomain code=516“invirons”cfnetworkdownload_wbv95z.tmp“”documents“...”userInfo={nsSourceFilePatherRokey=/users/IBTDI/Library/Developer/CoreSimulator/Devices/10CB5B13-42C2-4646-934C-67FD33C948C5/Data/Containers/Data/Application/F894940C-0D55-4953-A9FA-E852C1C4B440/TMP/CFNetworkDownload_WBV95z.tmp,nsUserStringVariant=(Move),

这个错误是因为在同一个目录中有一个同名的文件,我尝试使用responsestring而不是responsejson但是这并不能解决我的问题,我该怎么办呢?

共有1个答案

林子石
2023-03-14

您的代码中几乎没有错误:

  1. 它是数据任务,而不是Vadian指出的JSON任务。

将下载功能更改为:

func downloadPdf(pdfReport: String, uniqueName: String, completionHandler:@escaping(String, Bool)->()){

    let downloadUrl: String = URLs.pdfFileUrl + pdfReport
    let destinationPath: DownloadRequest.DownloadFileDestination = { _, _ in
        let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0];
        let fileURL = documentsURL.appendingPathComponent("\(uniqueName).pdf")
        return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
    }
    print(downloadUrl)
    Alamofire.download(downloadUrl, to: destinationPath)
        .downloadProgress { progress in

        }
        .responseData { response in
            print("response: \(response)")
            switch response.result{
            case .success:
                if response.destinationURL != nil, let filePath = response.destinationURL?.absoluteString {
                    completionHandler(filePath, true)
                }
                break
            case .failure:
                completionHandler("", false)
                break
            }

    }
}

您的错误是:

错误域=nsposixerrordomain code=17“文件存在”

清楚地告诉在该文件路径上已经有一个文件。因此,如果前面的文件有的话,这段代码将删除它。

 类似资料:
  • 问题内容: 我正在尝试使浏览器下载从ajax响应接收到的pdf文件。 受jquery ajax下载pdf文件启发,我模拟了如下单击/下载事件: 不幸的是,这仅适用于Chrome,不适用于Firefox + IE。当我尝试在最后两个浏览器中触发它时,没有任何反应。 由于从CMS继承,脚本和标记被放置在iframe中,但是我不确定这是否有影响。 关于如何针对所有现代浏览器进行优化的想法? 问题答案:

  • 问题内容: 我想下载一个jQueryajax响应的pdf文件。Ajax响应包含pdf文件数据。。我的代码在下面给出,但是我总是得到一个空白的pdf。 问题答案: jQuery使用AJAX请求加载二进制数据时存在一些问题,因为它尚未实现某些HTML5 XHRv2功能 鉴于此,您拥有以下两种解决方案之一: 第一个解决方案是放弃JQuery并使用XMLHTTPRequest 与本地HTMLHTTPReq

  • 我可以通过以下服务下载pdf文件: 但是,当我运行该服务时,我得到了以下响应: %���� 10 obj 要打开pdf,我需要用第二个鼠标按钮点击响应链接: WS网址 然后选择“在新选项卡中打开”以打开pdf文件,看起来您正在运行该服务两次以获得一次pdf文件。 我想自动打开每个请求到WS的pdf文件。 这意味着每次您请求WS时,都应该返回直接在屏幕中打开的pdf文件。 有人能帮我修一下吗? Tk

  • 我正在寻找一种在python中下载pdf文件的方法,我看到了关于推荐urllib模块的其他问题的答案。我试图用它下载一个pdf文件,但是当我试图打开下载的文件时,一条消息显示该文件无法打开。 错误消息 这是我使用的代码- 我做错了什么?此外,该文件会自动保存到python文件所在的目录中。如何更改它保存到的位置? 编辑-我再次尝试使用示例pdf的链接,http://unec.edu.az/appl

  • 我正在尝试使用Selenium WebDriver自动执行文件下载功能。我正在使用谷歌浏览器,要下载的文件类型是PDF格式。当 WebDriver 单击下载(或打印)链接时,浏览器将显示 pdf 文件的预览,而不是直接下载。如何使chrome驱动程序直接下载pdf文件?我尝试了下面的代码,但没有运气 我知道这个问题已经在StackOverflow上问过了,包括这个,但这些解决方案都不适合我。 我正

  • API将返回CSV/PDF/XLS类型的文件 问题: