React Native使用AWS SDK报错:config配置中缺少凭证
问题原因
你遇到的报错是三个配置错误共同导致的:
- S3实例初始化时的凭证字段名写错了:AWS SDK for JavaScript v2 中,静态凭证的正确字段是
accessKeyId和secretAccessKey,你写的accessKey、secretKey是无效字段,SDK识别不到有效凭证就会抛出缺失凭证的错误 - 凭证配置重复冲突:你同时给AWS全局配置了Cognito身份池凭证,又给S3实例单独传了静态凭证,两套配置冲突导致SDK无法正常读取凭证。你提到其他业务用同一组静态密钥可以正常上传,直接保留静态凭证即可,删掉多余的Cognito配置就行
- 异步函数没有错误捕获:
downloadFromS3是异步函数,你调用的时候没有加错误捕获逻辑,所以抛出的异常会变成未处理的Promise拒绝
修正后代码
S3初始化部分
// 删掉多余的全局Cognito凭证配置,只保留必要配置 const s3 = new AWS.S3({ region: 'us-east-2', // 修正凭证字段名 credentials: { accessKeyId: 'MY-ACCESS-KEY', secretAccessKey: 'MY-SECRET-KEY', }, params: {Bucket: 'rn-mobile-app-bucket'} });
下载函数部分
async function downloadFromS3 () { try { // 已经在S3实例配置了全局Bucket参数,请求时可以不用重复传 const file = await s3.getObject({ Key: 'Uploaded Photos/ColePic' }).promise(); console.log(file); return { data: file.Body, mimetype: file.ContentType } } catch (err) { // 可自行补充错误提示逻辑 console.error('S3下载失败:', err); return null; } }
useEffect调用部分无需修改,原有逻辑可正常运行
//Fetch all users from database useEffect(() =>{ downloadFromS3(); fetch('http://10.0.2.2:5000/forms').then(response =>{ if(response.ok){ return response.json(); } }).then(data => setFormsArray(data)); }, []);
内容的提问来源于stack exchange,提问作者Cole Perry
相关产品推荐
相关产品推荐

