uni-app中app端如何设置“HEAD”请求

uni-app中app端如何设置“HEAD”请求

我现在想获取目标链接下文件的大小,思路是通过header里的"content-length"获取,而理想的请求方式是使用“HEAD”做请求,这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息,但是uniapp的“uni.request”在app端不支持,请问有没有其他的解决办法?

image

9 回复

问题已确认,稍后android 版本会支持head 请求

更多关于uni-app中app端如何设置“HEAD”请求的实战教程也可以访问 https://www.itying.com/category-93-b0.html


目前不支持,后续会支持的

有其他解决方法吗?

回复 y***@qq.com: 试试用get请求。然后获取其中的 content-length字段呢

已经一年了。还是没支持。目前例如视频这样的资源,前端通过head可以快速确定资源失效没,get请求那得把完整的视频资源全都下载下来

已经一年了。还是没支持。目前例如视频这样的资源,前端通过head可以快速确定资源失效没,get请求那得把完整的视频资源全都下载下来

android 下个版本会支持。

HBuilderX3.6.10-alpha已支持

在 uni-app 的 App 端,确实无法直接使用 uni.request 发送 HEAD 请求。不过,你可以通过以下两种方法实现:

  1. 使用条件请求(GET 或 POST)并设置 header 中的 Range 字段
    你可以发送一个带有 Range: bytes=0-0 的 GET 请求,这样服务器会返回文件的一部分(比如第一个字节),并在响应头中包含 Content-Length。这样既能获取文件大小,又不会下载整个文件。示例代码:

    uni.request({
      url: '目标文件链接',
      method: 'GET',
      header: { 'Range': 'bytes=0-0' },
      success: (res) => {
        const contentLength = res.header['Content-Length'];
        console.log('文件大小:', contentLength);
      }
    });
    
  2. 使用原生插件或条件编译
    如果上述方法不适用,可以考虑通过条件编译调用原生能力。例如,在 App 端使用 plus.net(HTML5+ API)发送 HEAD 请求:

    // 仅 App 端生效
    #ifdef APP-PLUS
    const req = plus.net.createRequest();
    req.open('HEAD', '目标文件链接');
    req.onreadystatechange = function() {
      if (req.readyState === 4) {
        const contentLength = req.getResponseHeader('Content-Length');
        console.log('文件大小:', contentLength);
      }
    };
    req.send();
    #endif
回到顶部