如何在React Native中上传下载大文件AWS SDK for React Native 之 S3 TransferUtility 完全指南【免费下载链接】aws-sdk-react-nativeAWS SDK for React Native (developer preview)项目地址: https://gitcode.com/gh_mirrors/aw/aws-sdk-react-native在 React Native 移动应用中上传或下载大文件是电商、社交、视频类 App 的高频需求。本项目AWS SDK for React Native开发者预览版提供的S3 TransferUtility模块正是为此而生它封装了 AWS 官方的传输工具帮你轻松实现大文件上传下载并支持进度回调、断点续传式暂停/恢复和取消操作。本文将从零带你走完接入全流程。 什么是 S3 TransferUtilityTransferUtility 是 AWS SDK for React Native 中专门处理Amazon S3 文件传输的模块它位于项目根目录的TransferUtility/下包含三端代码平台核心实现文件JS 封装AWSS3TransferUtility.jsAndroid 原生层AWSRNS3TransferUtility.javaiOS 原生层AWSRNS3TransferUtility.m它帮你解决了原生 S3 客户端不擅长的几件事大文件分片传输底层自动使用多部件Multipart上传避免整包传输内存爆炸实时进度回调传输过程中持续推送completedUnits、totalUnits、fractionCompleted任务可控任意任务可pause暂停、resume恢复、cancel取消后台友好原生层通过独立线程管理传输任务不阻塞 JS 主线程 环境准备最快配置方法开始之前请准备好按 React Native 官方入门指南 装好 Xcode 与 Android Studio 环境一个Cognito 联合身份池Federated Identity Pool并允许未认证访问为身份池关联的 IAM 角色授予S3 的 Get / Put 权限一个S3 存储桶Bucket建议先往里面放一个 20MB 左右的大文件用于测试下载SDK 采用 npm 包组织模块间的依赖关系一目了然TransferUtility/package.json 声明了对aws-sdk-react-native-core的 peer 依赖因为身份认证统一走 Cognito这是 AWS 移动开发的最佳实践。 第一步初始化 Cognito 凭据与 S3 客户端所有 AWS 服务调用都依赖Cognito Identity提供的临时凭据因此第一步永远是初始化核心模块再初始化 TransferUtilityimport { AWSCognitoCredentials } from aws-sdk-react-native-core; import { AWSS3TransferUtility } from aws-sdk-react-native-transfer-utility; // 1. 初始化 Cognitoregion identity_pool_id AWSCognitoCredentials.initWithOptions({ region: us-east-1, identity_pool_id: us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx }); // 2. 初始化 S3 TransferUtility只需 S3 桶所在区域 AWSS3TransferUtility.initWithOptions({ region: us-west-2 });⚠️ 注意CognitoRegion与S3Region可以是不同区域两个值都填写在示例 App 的常量区TransferUtility.js 第 38~43 行。完整的可运行示例就在TransferUtility/example/目录配套说明见 示例 README填入你的 Region、Identity Pool ID 和 Bucket 名即可跑起来。⬆️ 如何上传大文件到 S3上传流程分两步先创建上传请求拿 requestID再触发 upload。AWSS3TransferUtility.createUploadRequest({ path: 图片本地路径, // Android 用 pathiOS 用 uri bucket: your-bucket, key: photos/picture.jpg, // 对象键 contenttype: image/jpeg, subscribe: true, // 开启进度事件 completionhandler: true // 开启完成事件 }, (error, value) { if (!error) { AWSS3TransferUtility.upload({ requestid: value }); } });示例 App 中演示了完整链路调用系统图库选择照片Android 取response.pathiOS 取response.uri再发起上传完整代码见 example/app/TransferUtility.js。⬇️ 如何从 S3 下载大文件下载与上传几乎对称只需把方法换成createDownloadRequestdownloadAWSS3TransferUtility.createDownloadRequest({ path: /your-bucket/video.mp4, // Android 需要带前缀iOS 只写文件名 bucket: your-bucket, key: video.mp4, subscribe: true, completionhandler: true }, (error, value) { if (!error) { AWSS3TransferUtility.download({ requestid: value }); } });跨平台差异提醒Android 的path会被原生层拼接到外部存储目录iOS 则直接使用你传入的路径这是新手最常踩的坑。 监听传输进度与完成事件开启subscribe后JS 侧会收到两类事件原生层通过事件发射器推送见 AWSS3TransferUtility.java 中的sendEvent1. 进度事件—— 驱动你的进度条AWSS3TransferUtility.progressEvent function(requestid, completedUnits, totalUnits, fractionCompleted, type) { // fractionCompleted 是 0~1 的小数直接绑到 ProgressBar console.log(进度: ${fractionCompleted * 100}% (${type})); };2. 完成事件—— 判断成败并拿到结果AWSS3TransferUtility.completionHandlerEvent function(requestid, error, request) { if (error) { console.log(传输失败或已取消: error); } else { console.log(完成对象位置: request.location); } };⏯️ 进阶技巧暂停、恢复与取消传输editEvent方法支持对单个任务或整类任务批量操作config取值pause/resume/cancelrequest与option二选一// 暂停某个具体任务 AWSS3TransferUtility.editEvent({ config: pause, request: requestID }); // 一次性取消所有上传 AWSS3TransferUtility.editEvent({ config: cancel, option: upload }); // 恢复所有暂停的下载 AWSS3TransferUtility.editEvent({ config: resume, option: download });option可选值all/upload/download。弱网环境下暂停再恢复能显著提升大文件传输的成功率是移动端必配的体验优化。️ 常见问题排查清单现象原因与解决region not suppliedinitWithOptions忘记传region字段AWSCognitoCredentials is not initialized先初始化 Cognito再初始化 TransferUtility下载路径找不到文件Android 下载路径基于外部存储目录注意拼接规则收不到进度事件createXxxRequest时subscribe未设为true权限报错 403IAM 角色未授予 S3 Get/Put 权限或身份池未关联角色 总结能力对应方法初始化客户端initWithOptions上传大文件createUploadRequestupload下载大文件createDownloadRequestdownload进度监听progressEvent结果监听completionHandlerEvent暂停/恢复/取消editEvent通过AWS SDK for React Native 的 S3 TransferUtility你可以在几十行代码内获得企业级的大文件传输能力分片传输、进度回调、任务控制一应俱全且 Android / iOS 双端行为一致。结合项目中的 示例应用 边跑边改是最快的上手路径。祝你传输顺畅【免费下载链接】aws-sdk-react-nativeAWS SDK for React Native (developer preview)项目地址: https://gitcode.com/gh_mirrors/aw/aws-sdk-react-native创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考