我正在尝试使用Python Boto从服务器下载特定的S3文件,并且收到“403 Forbidden”和“Access Denied”错误消息。它说错误发生在第24行(get_contents命令)。我在源文件路径的开头有和没有“aws s3 cp”尝试过它,两次都收到相同的错误信息。我的代码如下,任何建议都会有所帮助。
# Code to append csv:
import csv
import boto
from boto.s3.key import Key
keyId ="key"
sKeyId="secretkey"
srcFileName="aws s3 cp s3://...."
destFileName="C:\\Users...."
bucketName="bucket00001"
conn = boto.connect_s3(keyId,sKeyId)
bucket = conn.get_bucket(bucketName, validate = False)
#Get the Key object of the given key, in the bucket
k = Key(bucket, srcFileName)
#Get the contents of the key into a file
k.get_contents_to_filename(destFileName)
答案 0 :(得分:0)
"background": "-webkit-gradient(linear, "
+ "left top,"
+ "right top, "
+ "color-stop(" + startval + ",#C5C5C5),"
+ "color-stop(" + startval + ", #EA0A8A), "
+ "color-stop(" + endval + ", #EA0A8A),"
+ "color-stop(" + endval + ", #C5C5C5)"
+ ")",
"background": "-ms-linear-gradient(left,"
+"#C5C5C5 0,"
+"#C5C5C5 "+startval+","
+"#EA0A8A "+startval+","
+"#EA0A8A "+endval+","
+"#C5C5C5 "+endval+","
+"#C5C5C5 1"
+")",
这必须是srcFileName="aws s3 cp s3://...."
或somefolder/somekey
之类的字符串。
您正在向其提供somekey
或path
。
答案 1 :(得分:0)
AWS对其输出的错误非常模糊。这是故意的,但它绝对没有帮助调试。您收到拒绝访问错误,因为您使用的源文件名不是文件的正确路径。
aws s3 cp
这是将一个或多个文件从源复制到目标的CLI命令(两者都是s3存储桶)。这不应该是源文件名的一部分。
s3://...
此前缀附加到您的存储桶名称,表示路径引用s3对象,但是,在使用boto3时,源文件路径名中不需要这样做。
要使用boto3下载s3文件,请执行以下操作:
import boto3
BUCKET_NAME = 'my-bucket' # does not include s3://
KEY = 'image.jpg' # the file you want to download
s3 = boto3.resource('s3')
s3.Bucket(BUCKET_NAME).download_file(KEY, 'image.jpg')
此命令的文档可在此处找到: https://boto3.readthedocs.io/en/latest/guide/s3-example-download-file.html
通常,boto3(以及任何其他AWS开发工具包)都只是围绕AWS api请求的包装器。您也可以像我之前提到的那样使用aws cli从s3下载文件。该命令将是:
aws s3 cp s3://my-bucket/my-file.jpg C:\location\my-file.jpg