【问题标题】:Uploading image files to AmazonS3 using ReactJs使用 ReactJs 将图像文件上传到 AmazonS3
【发布时间】:2018-06-26 15:10:39
【问题描述】:

我对 Web 开发相当陌生(目前正在参加训练营),并且一直在努力寻找所需的资源,以便在我的项目中整合上传到 Amazon S3。对于之前的含糊之处,我深表歉意。

我目前有一个 React 应用程序从我的 AmazonS3 帐户中提取图像,但我打算让用户能够上传到我的存储桶并在我的网站上使用/查看图像。

我曾尝试观看教程并查看各种 GitHub Repo 以确定我缺少什么,但无法找到涉及 React、JSX 和 Javascript 的教程。 (我见过 jquery、PHP 等)。最终,我知道这项任务很困难,我愿意投入工作,但觉得有必要询问是否有人知道可以帮助我的有用资源?

我尝试使用“aws-nodejs-sample”存储库、“themetoerchef/uploading-with-react”存储库、观看了 YouTube 教程、查看了 FineUploader 并阅读了 react-S3-uploader npm文件,但无法连接点。此外,我已将我的 AWS 访问密钥包含在我的 .env 文件中,并尝试制作查询字符串来访问 S3 存储桶。

有没有更好的方法来解决这个问题,或者是否有其他方法可以在 S3 之外使用可能有用的 react 上传?

【问题讨论】:

  • 这个问题离题了。请在 Stackoverflow 中添加更多代码特定问题。
  • 你想直接从 React 应用上传图片还是有后端服务器(比如 node.js)?

标签: reactjs amazon-s3 react-redux image-uploading


【解决方案1】:

要从浏览器上传到 s3,您需要从 aws sdk 获取 signedUrl,这是 aws 验证您身份的方式。在我的上一个应用程序中,我使用 skd for nodejs 来生成 signedUrl 并将其传递给我的前端应用程序以用于将文件推送到 s3。你不必走那条路,有一个 sdk 可供浏览器中的 javascript 使用。

Check this aws link for more

【讨论】:

  • 感谢您的链接!我尝试按照他们的指南进行操作,但这超出了我的理解范围。我也按照他们的示例说明进行操作,只是没有取得任何进展。
  • 嘿@B-eck37,我想提供更多帮助,但我必须了解你这个问题的背景。可以描述你是如何做的并分享你已经拥有的代码
  • 你在这个过程中到底遇到了什么问题?
【解决方案2】:

进入你的项目目录并运行

npm install --save react-aws-s3

https://www.npmjs.com/package/react-aws-s3 并根据 NPM 文档在组件中添加代码

import S3 from 'react-aws-s3';
const config = {
    bucketName: 'myBucket',
    dirName: 'media', /* optional */
    region: 'eu-west-1',
    accessKeyId: 'JAJHAFJFHJDFJSDHFSDHFJKDSF',
    secretAccessKey: 'jhsdf99845fd98qwed42ebdyeqwd-3r98f373f=qwrq3rfr3rf',
    s3Url: 'https:/your-custom-s3-url.com/', /* optional */
}
 
const ReactS3Client = new S3(config);
/*  Notice that if you don't provide a dirName, the file will be automatically uploaded to the root of your bucket */
 
/* This is optional */
const newFileName = 'test-file';
 
ReactS3Client
    .uploadFile(file, newFileName)
    .then(data => console.log(data))
    .catch(err => console.error(err))
 
  /**
   * {
   *   Response: {
   *     bucket: "myBucket",
   *     key: "image/test-image.jpg",
   *     location: "https://myBucket.s3.amazonaws.com/media/test-file.jpg"
   *   }
   * }
   */
});

现在一切都完成了,请确保从 Process ENV 加载您的密钥和秘密。

注意:如果您看到 corse 错误,请不要忘记在 AWS 存储桶上添加 CORS 策略,请参阅此处的详细信息example

谢谢

【讨论】:

  • 你刚才写的上面的代码不起作用。我才发现是你写的。做一个免责声明! SO 不是为了自我推销
  • @Tessaracter,当您更新新版本时,这应该可以工作了,我看到了一个依赖更新通知,并且已在最新版本的 npm 上修复。
  • @Amitmishra 你能帮我解决这个问题吗stackoverflow.com/questions/63461863/…
  • @Amitmishra 一直试图让 react-aws-s3 在我的项目中工作,但不知何故无法让 CORS 工作,在尝试上传时不断收到 400(错误请求),即使当存储桶已经公开。您能否详细举例说明您如何配置 CORS 设置?
  • @Amitmishra 我忘记了我做了什么,但设法解决了它并最终让它工作。感谢您抽出时间回复我。
猜你喜欢
  • 2015-09-20
  • 2021-12-11
  • 2019-10-02
  • 2021-09-29
  • 2021-11-03
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多