python - 无需在 Python 中进行身份验证即可将大文件上传到 S3
问题描述
我正在尝试在不使用凭证的情况下将大文件上传到 Amazon S3。我正在为 Octoprint 创建一个插件,由于它是公开的,我无法将任何类型的凭据放入代码中。目前我的上传代码如下所示:
import boto3
from botocore import UNSIGNED
from botocore.client import Config
s3 = boto3.client('s3', config=Config(signature_version=UNSIGNED))
# Create an S3 client
filename = 'file.txt'
bucket_name = 'BUCKET_HERE'
s3.upload_file(filename, bucket_name, filename)
但是,它给了我以下错误:
S3UploadFailedError: Failed to upload largefiletest.mp4 to BUCKETNAMEHERE/largefiletest.mp4: An error occurred (AccessDenied) when calling the CreateMultipartUpload operation: Anonymous users cannot initiate multipart uploads. Please authenticate.
有什么办法可以解决这个问题,或者对替代库有什么建议吗?任何事情都值得赞赏。
解决方案
您的意思是存储库是公共的,但运行时环境是私有的?如果是这样,标准做法是像这样设置环境变量:
# first pip install environ
import environ
SOME_KEY = env('SOME_KEY', default='')
这样,您可以轻松更新您的凭据,而无需更改代码或损害安全性。
编辑: 然后在机器上运行此代码,您可以设置环境变量,如下所示:
推荐阅读
- gcc - 在 gcc 中安装 icuin
- python-3.x - sep=' ' 不工作。是什么原因?
- javascript - 如何让 Cypress.$ 在 while 循环中获取选择器的最新值
- javascript - 在 PDFKit 中使用子数组访问子数组的 Javascript - NODE JS
- java - If else 程序
- excel - 从 Excel 表中填充的下拉列表未正确选择
- javascript - nodejs - 如何在注册后强制用户完成个人资料?
- python - 有没有办法在熊猫数据框中识别行实际包含数据的列
- ios - 应用程序在调用自定义按钮的 setNeedsDisplay 时崩溃
- rust - 了解枚举 Rust 的移动语义