李广妮
李广妮
  • 发布:2025-12-23 22:39
  • 更新:2025-12-24 10:22
  • 阅读:62

给uni.upload添加拦截器,成功回调拦截success返回的数据缺少header信息

分类:uni-app

给uni.request和uni.upload添加相同的拦截器,
但是两者在success回调返回的字段数据有差异, upload缺少header及cookies参数

请问, 有没有什么方式,能在upload请求中获取到response的header信息

  • request请求返回的字段包括:

    {  
    "data": {.....},  
    "statusCode": 200,  
    "header": {......},  
    "cookies": [],  
    "errMsg": "request:ok"  
    }
  • upload请求返回的字段包括:

    {  
    "statusCode": 200,  
    "data": ".....",  
    "errMsg": "uploadFile:ok"  
    }

// 拦截器配置  
const httpInterceptor = {  
  // 拦截前触发  
  invoke(options) {  
    console.log('Interceptor invoke options', options)  
    // 业务逻辑,,,,  
  },  
  success(options) {  
    console.log('Interceptor success options', options)  
   // 业务逻辑,,,  
  },  
  fail(args) {  
    uni.showToast({  
      icon: 'none',  
      title: '网络错误,换个网络试试',  
    })  
  },  
}  

export const requestInterceptor = {  
  install() {  
    // 拦截 request 请求  
    uni.addInterceptor('request', httpInterceptor)  
    // 拦截 uploadFile 文件上传  
    uni.addInterceptor('uploadFile', httpInterceptor)  
  },  
}  
2025-12-23 22:39 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询

根据问题描述和知识库内容,uni.uploadFile 的 success 回调确实不包含 header 和 cookies 信息,这是设计差异导致的。解决方案如下:

  1. 微信小程序平台:可使用 uploadTask.onHeadersReceived 方法获取响应头(仅微信小程序支持):

    const uploadTask = uni.uploadFile({ /* 配置 */ });  
    uploadTask.onHeadersReceived((res) => {  
    console.log('Header:', res.header);  
    console.log('Cookies:', res.cookies);  
    });
  2. 其他平台(App/H5等):由于 uni.uploadFile 不直接返回 header,建议:

    • 将需要的 header 信息放入服务器响应体中
    • 或改用 uni.request 手动实现文件上传(通过 formData 传文件)
    • 或使用插件市场的增强网络库(如 flyio
  3. 拦截器方案:虽然拦截器无法直接修改 uploadFile 的返回结构,但可通过 returnValue 钩子处理:

    uni.addInterceptor('uploadFile', {  
    returnValue(res) {  
    // 尝试从其他途径获取 header(需自行实现)  
    return new Promise((resolve) => {  
      // 自定义逻辑获取 header 后合并到结果  
      resolve({ ...res, header: customHeader });  
    });  
    }  
    });

注意:根据文档,onHeadersReceived 仅微信小程序支持。其他平台建议优先考虑修改服务端响应结构或使用替代方案。

内容为 AI 生成,仅供参考
DCloud_UNI_JBB

DCloud_UNI_JBB

你是在哪个端需要这个功能

  • 李广妮 (作者)

    最好是全端适配。

    现在微信小程序端测试正常,h5和APP异常。其他端暂未测试

    2025-12-24 15:03

要回复问题请先登录注册