鸿蒙Next如何获取下载之前文件的大小

在鸿蒙Next系统中,如何获取待下载文件的大小?有没有API可以直接获取文件大小信息?

2 回复

鸿蒙Next里想提前知道文件多大?用fs.statSync(filePath).size就行!简单说就是:先让系统“摸一下”文件,然后报上尺寸~ 记得加个异常处理,别让程序被不存在的文件吓哭哦!😄

更多关于鸿蒙Next如何获取下载之前文件的大小的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中,获取下载前文件的大小通常需要从服务器获取文件信息。以下是实现方法:

核心思路

通过HTTP HEAD请求获取文件头信息,从响应头中解析Content-Length字段。

代码示例(ArkTS)

import http from '@ohos.net.http';
import { BusinessError } from '@ohos.base';

async function getFileSizeBeforeDownload(url: string): Promise<number> {
  let httpRequest = http.createHttp();
  
  try {
    // 发送HEAD请求
    let response = await httpRequest.request(
      url,
      {
        method: http.RequestMethod.HEAD, // 关键:使用HEAD方法
        connectTimeout: 60000,
        readTimeout: 60000
      }
    );

    // 获取Content-Length头信息
    const contentLength = response.header?.['Content-Length'];
    if (contentLength) {
      return parseInt(contentLength);
    } else {
      throw new Error('无法获取文件大小');
    }
  } catch (error) {
    console.error('获取文件大小失败:', (error as BusinessError).message);
    throw error;
  } finally {
    httpRequest.destroy();
  }
}

// 使用示例
getFileSizeBeforeDownload('https://example.com/file.zip')
  .then(size => {
    console.log('文件大小:', size + ' bytes');
    // 可进一步转换为KB/MB
    console.log('文件大小:', (size / 1024 / 1024).toFixed(2) + ' MB');
  })
  .catch(err => console.error('错误:', err));

注意事项

  1. HEAD请求:相比GET请求更高效,只返回头部信息
  2. 服务器必须支持HEAD方法并正确返回Content-Length
  3. 部分动态生成的文件可能无法提前获取大小
  4. 需要网络权限:
    "reqPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ]
    

备选方案

如果HEAD请求不可用,可改用GET请求并设置Range头,通过部分请求获取大小,但会消耗更多流量。

这种方法适用于任何可通过HTTP访问的文件资源。

回到顶部