首页 > 解决方案 > 无需在 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.

有什么办法可以解决这个问题,或者对替代库有什么建议吗?任何事情都值得赞赏。

标签: pythonamazon-web-servicesamazon-s3octoprint

解决方案


您的意思是存储库是公共的,但运行时环境是私有的?如果是这样,标准做法是像这样设置环境变量:

# first pip install environ
import environ
SOME_KEY = env('SOME_KEY', default='')

这样,您可以轻松更新您的凭据,而无需更改代码或损害安全性。

编辑: 然后在机器上运行此代码,您可以设置环境变量,如下所示:


推荐阅读