You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift iOS端下载PDF体积过小损坏无法打开问题求助

问题根因

从你提供的响应日志就能直接定位问题:返回的Content-Type: text/html; charset=UTF-8,且Content-Length仅为1344字节,说明你请求拿到的根本不是PDF文件,是HTML页面,所以存下来的文件只有几KB、无法打开。

具体问题说明
  • Alamofire请求配置错误:你给GET请求加了encoding: JSONEncoding.default配置,GET请求的参数需要拼接在URL路径中,放在请求Body里后端不会识别,会直接返回错误页面。
  • 缺少必要鉴权信息:你单独验证链接时,浏览器自动携带了已登录的Cookie信息所以能正常下载,但代码发起请求时没有携带对应的鉴权凭证(Token或Cookie),后端返回了登录页/错误提示页的HTML内容,就是你拿到的损坏文件。
  • 第二个Data(contentsOf:)的实现本身就是同步阻塞方法,不适合做网络请求,同时也没有携带鉴权信息,所以也复现了同样的故障。
修复方案

1. 修正Alamofire请求配置

移除GET请求多余的JSONEncoding配置,添加必要的鉴权头,指定接受PDF格式返回:

import Foundation
import Alamofire

class DownloadOrderService {
    
    static let shared = DownloadOrderService()

    func downloadPDFOrder(orderID: Int, completion: @escaping(_ error: Error?)-> Void) {
        let urlString = getJSON(strURL:"URL")
        // 替换为你实际的鉴权头,比如Bearer Token或者Cookie字段
        let headers: HTTPHeaders = [
            "Authorization": "Bearer 你的用户登录Token",
            "Accept": "application/pdf"
        ]
        
        let destination: DownloadRequest.Destination = { _, _ in
            let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
            let fileURL = documentsURL.appendingPathComponent("\(orderID).pdf")
            return (fileURL,[.removePreviousFile, .createIntermediateDirectories])
        }
        
        AF.download(urlString, method: .get, headers: headers, to: destination).downloadProgress(closure: { prog in
            // 可自行处理下载进度
        }).response { response in
            // 可打印返回头验证是否正确拿到PDF
            debugPrint("响应状态码:\(response.response?.statusCode ?? 0)")
            debugPrint("返回Content-Type:\(response.response?.headers["Content-Type"] ?? "")")
            completion(response.error)
        }
    }
}

2. 调试确认返回内容

如果修改后仍然异常,可以先调用普通接口请求打印返回的字符串内容,确认返回的不是错误页面:

AF.request(urlString, method: .get, headers: headers).responseString { response in
    debugPrint("接口返回内容:\(response.value ?? "")")
}

内容的提问来源于stack exchange,提问作者Menaim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:15:04