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

如何使用Expo FileSystem.uploadAsync展示上传进度?附Axios替代方案

带进度的二进制文件上传实现方案

一、Expo FileSystem.uploadAsync的进度支持现状

FileSystem.uploadAsync目前没有内置的上传进度监听功能,官方API未提供相关回调参数,没法直接通过这个方法实现进度展示。

二、Axios实现二进制上传+进度展示

如果需要进度功能,可以通过Expo FileSystem读取文件二进制数据后,用Axios完成上传并监听进度,具体代码如下:

1. 读取本地文件为二进制Blob

import * as FileSystem from 'expo-file-system';
import axios from 'axios';

// 从本地URI读取文件为Base64编码,再转换为Blob
const base64Data = await FileSystem.readAsStringAsync(uri, {
  encoding: FileSystem.EncodingType.Base64,
});
const blob = new Blob(
  [Uint8Array.from(atob(base64Data), char => char.charCodeAt(0))],
  { type: 'application/octet-stream' } // 根据文件类型调整MIME,比如图片用image/jpeg
);

2. Axios上传并监听进度

try {
  const response = await axios({
    url: uploadUrl,
    method: 'PUT',
    data: blob,
    headers: {
      ...headers,
      'Content-Type': 'application/octet-stream', // 匹配Blob的MIME类型
    },
    onUploadProgress: (progressEvent) => {
      // 计算上传进度百分比
      const progress = Math.round((progressEvent.loaded * 100) / progressEvent.total);
      // 这里直接更新你的UI组件,比如进度条的数值
      console.log(`上传进度:${progress}%`);
    },
  });
  console.log('上传完成', response.data);
} catch (err) {
  console.error('上传失败', err);
}

注意事项

  • 如果明确文件类型,把application/octet-stream替换为对应MIME类型,能提升服务端处理的兼容性。
  • onUploadProgress回调会在上传过程中多次触发,实时返回已上传字节和总字节数,用来计算进度非常方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:22:22