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

iOS端用Expo FileSystem.downloadAsync报400错误,Android正常

解决iOS上Expo FileSystem.downloadAsync 400 Bad Request问题

以下是针对该问题的排查和解决方向:

  • 移除无效请求头
    Access-Control-Allow-Origin是响应头,不需要在请求中携带。iOS网络层对无效请求头的校验更严格,直接删除该头;同时下载PDF的GET请求通常不需要Content-Type头,多余的头可能触发后端校验报错:

    headers : {
      'Authorization': "Bearer " + data.jwt,
      'X-CSRF-TOKEN': data.csrf,
    }
    
  • 对URL参数进行编码
    如果data.documentId包含特殊字符(如斜杠、空格、非ASCII字符),iOS的URL解析逻辑和Android存在差异,需对参数做URL编码处理:

    const encodedDocumentId = encodeURIComponent(data.documentId);
    const file = await FileSystem.downloadAsync(
        config.API_DOC_URI + "/documents/pdf/download/" + encodedDocumentId,
        FileSystem.cacheDirectory + documentName,
        { /* 配置项 */ }
    )
    
  • 校验Token的有效性与格式
    部分iOS设备可能因系统时间偏差导致JWT过期,或Token中的特殊字符在iOS端被错误解析:

    • 确认设备时间与服务器时间同步
    • 打印data.jwt和data.csrf内容,对比Android端的输出,确保无格式差异(如多余空格、换行)
  • 抓包对比请求差异
    用抓包工具(如Proxyman)捕获iOS和Android的请求,对比以下内容:

    • 请求URL的完整格式
    • 所有请求头的键值对
    • 请求方法(确认均为GET)
      找出iOS请求中与Android不一致的地方,针对性调整。
  • 更新Expo及相关依赖
    旧版本的Expo FileSystem可能存在iOS特定bug,尝试更新到最新稳定版:

    expo update
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:45:38