uni-app中uni.uploadFile获取不到接口返回的header怎么办?

发布于 1周前 作者 gougou168 来自 Uni-App

uni-app中uni.uploadFile获取不到接口返回的header怎么办?

uni.uploadFile获取不到接口返回的header?

1 回复

uni-app 中使用 uni.uploadFile 方法上传文件时,确实有可能遇到无法获取接口返回的 header 的问题。这通常是因为 uni.uploadFile 的 API 设计限制,它主要返回的是响应的数据体(responseData),而不直接提供响应头(header)。

为了解决这个问题,我们可以采用一些变通的方法,比如通过服务器在响应体中返回必要的信息,或者通过其他方式(如额外的请求)来获取这些信息。不过,如果你确实需要获取响应头,可以考虑以下方案:

方案一:通过响应体返回必要信息

如果服务器可控,可以在服务器响应时将需要的头部信息作为响应体的一部分返回。例如,服务器可以返回一个 JSON 对象,其中包含所需的数据和头部信息。

uni.uploadFile({
    url: 'https://example.com/upload',
    filePath: tempFilePaths[0],
    name: 'file',
    formData: {
        user: 'test'
    },
    success: (uploadFileRes) => {
        const responseData = JSON.parse(uploadFileRes.data);
        // 假设服务器在响应体中返回了自定义的header信息
        console.log('Custom Header Info:', responseData.customHeaderInfo);
    },
    fail: (error) => {
        console.error('Upload failed:', error);
    }
});

方案二:使用额外请求获取响应头

如果必须在客户端获取响应头,可以考虑在文件上传成功后,使用另一个请求(如 uni.request)去查询上传结果,这个请求可以返回完整的响应,包括头部信息。

// 首先上传文件
uni.uploadFile({
    url: 'https://example.com/upload',
    filePath: tempFilePaths[0],
    name: 'file',
    formData: {
        user: 'test'
    },
    success: (uploadFileRes) => {
        // 假设上传成功返回了一个上传凭证(如uploadId)
        const uploadId = JSON.parse(uploadFileRes.data).uploadId;
        
        // 使用uploadId发起另一个请求获取详细信息
        uni.request({
            url: `https://example.com/upload/status?uploadId=${uploadId}`,
            method: 'GET',
            success: (requestRes) => {
                // 现在可以访问响应头
                console.log('Response Headers:', requestRes.header);
            },
            fail: (error) => {
                console.error('Request failed:', error);
            }
        });
    },
    fail: (error) => {
        console.error('Upload failed:', error);
    }
});

以上两种方法都可以在一定程度上解决 uni.uploadFile 无法直接获取响应头的问题。具体选择哪种方案,取决于你的应用场景和服务器端的支持情况。

回到顶部