Django 有了AWS,我为什么可以';无法访问我的文件,无论它是如何存在的?
大家好,真棒强> 问题在于django 1.11和python 3.5 从6个小时以来我一直在努力 当我访问浏览器中的链接时,它会正确显示文件Django 有了AWS,我为什么可以';无法访问我的文件,无论它是如何存在的?,django,amazon-web-services,amazon-s3,Django,Amazon Web Services,Amazon S3,大家好,真棒 问题在于django 1.11和python 3.5 从6个小时以来我一直在努力 当我访问浏览器中的链接时,它会正确显示文件 http://bucket-name.s3.amazonaws.com/media/public/path/to/file.pdf 但当我这么做的时候: with open(absolute_path, 'wb') as output: output.write(object_content) 我得到以下错误: 异常类型:FileNotFound
http://bucket-name.s3.amazonaws.com/media/public/path/to/file.pdf
但当我这么做的时候:
with open(absolute_path, 'wb') as output:
output.write(object_content)
我得到以下错误:
异常类型:FileNotFoundError
异常值:[Errno 2]没有这样的文件或目录:http://bucket-name.s3.amazonaws.com/media/public/path/to/file.pdf
'
为什么我无法访问该文件?如果您想将S3对象的主体读入变量,那么可以使用以下命令
import boto3
s3 = boto3.resource('s3')
obj = s3.Object('my-bucket', 'cat.jpg')
body = obj.get()['Body'].read()
如果要将文件从S3下载到本地文件,则:
import boto3
import botocore
s3 = boto3.resource('s3')
try:
s3.Bucket('my-bucket').download_file('cat.jpg', '/tmp/cat.jpg')
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "404":
print("The object does not exist.")
else:
raise
如果要将文件上载到S3:
import boto3
s3 = boto3.resource('s3')
s3.Bucket('my-bucket').put_object(Key='test.jpg', Body=data)
如果您想将S3对象的主体读入变量中,那么可以使用如下方法
import boto3
s3 = boto3.resource('s3')
obj = s3.Object('my-bucket', 'cat.jpg')
body = obj.get()['Body'].read()
如果要将文件从S3下载到本地文件,则:
import boto3
import botocore
s3 = boto3.resource('s3')
try:
s3.Bucket('my-bucket').download_file('cat.jpg', '/tmp/cat.jpg')
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "404":
print("The object does not exist.")
else:
raise
如果要将文件上载到S3:
import boto3
s3 = boto3.resource('s3')
s3.Bucket('my-bucket').put_object(Key='test.jpg', Body=data)
我对Django不太熟悉,但是你能在远程URL上使用
open
?这不是仅用于打开本地文件吗?使用请求怎么样request=requests.get(绝对路径)
这不是Django特有的,@MattClark是正确的。无法使用open
打开URL。S3文件不是磁盘文件。您应该使用类似于requests
或更好的AWS API库,例如boto
Ok got it@MattClark!我正在使用boto
@Selcuk。我想要的是将来自AWS bucket的字节文件写入另一个现有文件,这样我就可以将其添加到我的zip包中。我对Django不太熟悉,但是你能在远程URL上使用open
?这不是仅用于打开本地文件吗?使用请求怎么样request=requests.get(绝对路径)
这不是Django特有的,@MattClark是正确的。无法使用open
打开URL。S3文件不是磁盘文件。您应该使用类似于requests
或更好的AWS API库,例如boto
Ok got it@MattClark!我正在使用boto
@Selcuk。我想要的是将来自AWS bucket的字节文件写入另一个现有文件,这样我就可以将它添加到我的zip-packageNo!我想从S3下载文件…我想把来自AWS bucket的字节文件写入另一个现有文件,这样我就可以将它添加到我的zip包Interestbody=obj.get()['body'].read()
从这一行开始,文件是bytes对象,我想将其转换为文件,以便将其添加到zip包中。这是非常有用的,我想上去投票吧,没有足够的声誉不!我想从S3下载文件…我想把来自AWS bucket的字节文件写入另一个现有文件,这样我就可以将它添加到我的zip包Interestbody=obj.get()['body'].read()
从这一行开始,文件是bytes对象,我想将其转换为文件,以便将其添加到zip包中。这是非常有用的,我想上去投票吧,没有足够的声誉