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

如何修复NativeScript AWS S3上传中的`t.hrtime is not a function`错误?

解决NativeScript上传AWS S3时的TypeError: t.hrtime is not a function错误

这个问题我之前在NativeScript项目里踩过坑,本质原因很明确:标准的aws-sdk是为Node.js环境设计的,它依赖了Node专属的API(比如process.hrtime),但NativeScript的移动端运行环境并不支持这些Node.js特有的API,所以才会抛出这个缺失方法的错误。你同时引入aws-sdk和nativescript-aws的操作,反而会因为标准SDK的兼容性问题触发报错。

下面给你两个可行的解决方向,优先推荐第一个:

方案一:移除标准aws-sdk,使用nativescript-aws完成上传

nativescript-aws是专门为NativeScript适配的AWS工具包,已经处理了移动端环境的兼容性问题,完全可以替代标准SDK实现S3上传。

步骤1:卸载标准AWS SDK

先把冲突的依赖去掉:

npm uninstall aws-sdk
# 如果你用yarn的话:
yarn remove aws-sdk

步骤2:调整上传代码为nativescript-aws的用法

注意:原代码里Body: this.licenseFileName是错误的——Body需要传入文件的二进制内容,而不是文件名,这也是潜在的问题点。下面是修正后的完整示例:

首先在App启动时初始化AWS配置(比如app.js/main.ts):

import { AWSAuth, AWSConfig } from 'nativescript-aws';

// 替换成你的AWS凭证和区域
AWSConfig.initialize({
  accessKeyId: '你的AWS Access Key',
  secretAccessKey: '你的AWS Secret Key',
  region: '你的S3存储桶区域(比如us-east-1)'
});

然后修改上传逻辑:

import { AWSS3 } from 'nativescript-aws';
import * as fs from '@nativescript/core/file-system'; // 引入文件系统模块

async function uploadLicenseToS3() {
  try {
    const s3 = new AWSS3();
    // 从文件路径读取二进制内容
    const file = fs.File.fromPath(this.licenseFileName);
    const fileContent = await file.read();

    const uploadResult = await s3.putObject({
      Bucket: AWS_S3_bucket,
      Key: 'license',
      Body: fileContent,
      ContentType: 'application/pdf'
    });

    console.log('文件上传成功:', uploadResult);
    return true;
  } catch (err) {
    console.log('文件上传失败:', err);
    return false;
  }
}

方案二:保留标准aws-sdk,添加Node API模拟插件(不推荐)

如果因为某些原因必须使用标准aws-sdk,可以通过nativescript-nodeify插件模拟缺失的Node.js API,但这种方法可能会引入其他兼容性问题,仅作为备选:

  1. 安装插件:
npm install nativescript-nodeify --save
  1. 在项目入口文件(比如app.js)顶部添加:
require('nativescript-nodeify');

之后再尝试运行原上传代码,但依然要注意修正Body参数的问题。


内容的提问来源于stack exchange,提问作者Paul Castro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:12:48