在Python中无需身份验证即可将大型文件上载到S3
我正在尝试在不使用凭据的情况下将大型文件上载到AmazonS3。我正在用这个为Octoprint创建一个插件,由于它是公开的,所以我不能在代码中添加任何类型的凭据。目前,我上传的代码如下所示:在Python中无需身份验证即可将大型文件上载到S3,python,amazon-web-services,amazon-s3,octoprint,Python,Amazon Web Services,Amazon S3,Octoprint,我正在尝试在不使用凭据的情况下将大型文件上载到AmazonS3。我正在用这个为Octoprint创建一个插件,由于它是公开的,所以我不能在代码中添加任何类型的凭据。目前,我上传的代码如下所示: import boto3 from botocore import UNSIGNED from botocore.client import Config s3 = boto3.client('s3', config=Config(signature_version=UNSIGNED)) # Crea
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)
# first pip install environ
import environ
SOME_KEY = env('SOME_KEY', default='')
但是,它给了我以下错误:
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.
有没有办法解决这个问题,或者对其他图书馆有什么建议?您的意思是存储库是公共的,而运行时环境是私有的吗?如果是这样,标准做法是设置如下环境变量:
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)
# first pip install environ
import environ
SOME_KEY = env('SOME_KEY', default='')
这样,您就可以轻松地更新凭据,而无需更改代码或损害安全性
编辑:
然后,在将运行此代码的计算机上,您可以将环境变量设置为:
- 马科斯:
- Linux:
- 窗口: