Mav*_*ick 6 django amazon-s3 boto python-2.7 django-1.8
这是我第一次将AWS S3用于媒体存储.该应用程序托管在Heroku中,对于静态文件它不是一个问题所以我不想更改静态文件,但希望应用程序用户上传我希望存储在S3中的文件和图像.到目前为止我已经花了2-3天没有找到合适的解决方案,因为我没有正当理由得到400例.这是我提到的文档:http: //tech.marksblogg.com/file-uploads-amazon-s3-django.html 所以,我的设置现在:
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_S3_ACCESS_KEY_ID='dummyid'
AWS_S3_SECRET_ACCESS_KEY='dummykey'
AWS_STORAGE_BUCKET_NAME='dummyname'
AWS_QUERYSTRING_AUTH = False
AWS_HEADERS = {'Cache-Control': 'max-age=86400', }
MEDIAFILES_LOCATION = 'media'
MEDIA_URL = 'http://%s.s3.amazonaws.com/media/' % AWS_STORAGE_BUCKET_NAME
Run Code Online (Sandbox Code Playgroud)
我的模特:
class DummyDocuments(models.Model):
document = models.FileField(upload_to='documents')
我的表格:
class DummyUploadForm(forms.Form):
documents = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
以下是我使用它的视图:
def upload(request):
if request.method == 'POST':
form = DummyUploadForm(request.POST, request.FILES)
if form.is_valid():
files = request.FILES.getlist('documents')
for file in files:
instance = DummyDocuments(document=file)
instance.save()
return redirect('activation_upload')
else:
form = DummyUploadForm()
documents = DummyDocuments.objects.all()
return render(request, 'activation/dummyupload.html', {'form': form, 'documents': documents})
Run Code Online (Sandbox Code Playgroud)
这是我在AWS上的CORS配置:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
我可以知道到底出了什么问题吗?
所有这些django存储库都是安静无记录的.我经历了很多不同的文章来解决这个问题.你需要这个设置:
AWS_S3_HOST = 's3.ca-central-1.amazonaws.com'
Run Code Online (Sandbox Code Playgroud)
并~/.boto
配置内容:
[Credentials]
aws_access_key_id=yourid
aws_secret_access_key=yourkey
[s3]
host=s3.ca-central-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)
我相信这是由此问题引起的(假设所有凭据和其他设置都正确,但它抛出 400 错误而不是 403)。
结果,这两个选项似乎是:
添加文件 ~/.boto 并根据Martin对该线程的评论添加以下内容:
[s3]
host=s3.eu-central-1.amazonaws.com
替换为您合适的区域。您可以通过touch ~/.boto
从那里编辑它来创建文件,或者简单地执行nano ~/.boto
并保存它。
归档时间: |
|
查看次数: |
1108 次 |
最近记录: |