我正在使用AWS,我的应用程序中会有不同的存储桶.我也在使用Django-Storages.有没有办法指定我要将文件上传到哪个存储桶(例如,作为Save()函数中的参数或其他什么?)
我看到这个Django - 导入storages.backends时出错,但我不明白它应该如何使用?!
谢谢!
嘿所以试图将我的用户上传的图像连接到我的S3存储桶,以便图像存储在那里.使用django存储(进行了一些研究,似乎是每个人都建议的,但对想法持开放态度)
这是我做的:
安装了django存储
pip install django-storages
Run Code Online (Sandbox Code Playgroud)
将它添加到我的INSTALLED_APPS中
#settings.py
INSTALLED_APPS = (
...
'storages',
)
Run Code Online (Sandbox Code Playgroud)
并将此代码添加到settings.py中
#settings.py
DEFAULT_FILE_STORAGE = 'storages.backends.s3.S3Storage'
AWS_ACCESS_KEY_ID = '#################'
AWS_SECRET_ACCESS_KEY = '#######################'
AWS_STORAGE_BUCKET_NAME = 'mybucketname'
Run Code Online (Sandbox Code Playgroud)
然后我打开shell并运行它来检查
from django.core.files.storage import default_storage
print default_storage.connection
...
ImproperlyConfigured: Could not load amazon's S3 bindings.
See http://developer.amazonwebservices.com/connect/entry.jspa?externalID=134
Run Code Online (Sandbox Code Playgroud)
该链接导致404错误.一直关注文档并尝试了所有3种方法来设置DEFAULT_FILE_STORAGE,但它们都不起作用.见下文.
DEFAULT_FILE_STORAGE = 'libs.storages.backends.S3Storage.S3Storage'
ImproperlyConfigured: Error importing storage module libs.storages.backends.S3Storage
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
ImproperlyConfigured: Could not load Boto's S3 bindings.
Run Code Online (Sandbox Code Playgroud)
如何正确设置?
python django amazon-s3 amazon-web-services python-django-storages
我有一个 Django 表单,它通过 django-storages 库将文件保存到 s3 并且工作正常。如何生成并返回预签名 URL,以便用户可以在文件上传后临时访问该文件?这是由 django-storages 抽象的还是我必须使用 boto3 api?
我花了几个小时浏览 Django-storages 文档,但是不太清楚如何做到这一点..
表格.py
class DocumentForm(forms.Form):
docfile = forms.FileField(
label='Select a file',
help_text='max. 42 megabytes'
)
name = models.CharField(max_length=20)
uploaded_at = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
视图.py
def upload_file(request):
if request.method == 'POST':
form = DocumentForm(request.POST)
if form.is_valid():
form.save()
url = ... # generate pre-signed url of uploaded file here
return render(request, 'upload_response.html', url)
Run Code Online (Sandbox Code Playgroud) 我想将 django-storages 与 minio 一起使用,所以我尝试采用设置、配置等。我在网上找到了,但由于某种原因,我的访问密钥或提供它的方式失败,并出现以下错误:
botocore.exceptions.ClientError: An error occurred (InvalidAccessKeyId) when calling the PutObject operation: The AWS Access Key Id you provided does not exist in our records.
Run Code Online (Sandbox Code Playgroud)
如果我跑manage.py collectstatic
设置.py
#S3 config
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'MyProject/static'),
]
AWS_ACCESS_KEY_ID = '9VOWWCTSMX4ZEGVW7N9D'
AWS_SECRET_ACCESS_KEY = 'zJFf9BYWk0TM3FVwyY98UFy0o+DQF0oY1vCXgLqV'
AWS_STORAGE_BUCKET_NAME = 'static'
AWS_S3_CUSTOM_DOMAIN = '127.0.0.1:9000'
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'static'
STATIC_URL = 'http://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
Run Code Online (Sandbox Code Playgroud)
也许有人已经这样做了?
我们有一个使用django-storages上传到AWS的图像上传器.现在它通过http发送图像,但我们希望它使用https.
谷歌搜索并没有帮助我找到一种方法来配置django-storage来做到这一点.有没有人知道实现这一目标的最佳方法,或任何能指明我正确方向的文档.
我在Amazon S3上使用django-storage.我间歇地看到以下错误:
name = self._normalize_name(self._clean_name(name))\n\n File \"/app/.heroku/venv/lib/python2.7/site-packages/storages/backends/s3boto.py\", line 237, in _normalize_name\n name)\n\nSuspiciousOperation: Attempted access to 'https:/plantvillage.s3.amazonaws.com/avatar/hans9_avatar.jpg'
Run Code Online (Sandbox Code Playgroud)
注意单/后https:.
有谁知道为什么会出现这种情况?它不会一直发生.我可以在其他情况下成功地做到这一点.
我正在尝试使用Django的存储后端(对于BotoS3)
settings.py:
INSTALLED_APPS = (
...
'storages',
...
)
Run Code Online (Sandbox Code Playgroud)
如http://django-storages.readthedocs.org/en/latest/index.html所示.
和,requirements.txt:
django-storages==1.1.8
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
django.core.exceptions.ImproperlyConfigured: ImportError storages: No module named storages
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我想使用CloudFront 的签名 URL而不是普通的未签名 URL。
django-storages提供了选项,AWS_S3_CUSTOM_DOMAIN但随后它会从 CloudFront 的子域生成未签名的 URL。默认情况下AWS_QUERYSTRING_AUTH是True,它并生成S3签署的网址。为 CloudFront 生成签名 URL 的任何方式。
这是我希望打开的设置,但由于未签名的 URL,我禁用了它。
我希望为我的发行版打开的设置
django amazon-web-services amazon-cloudfront boto3 python-django-storages
我正在使用 django-storages 在Dropbox. 但我无法让它工作(媒体文件仍存储在本地服务器中)。
我已经安装了 dropbox 和 django-storages,并创建了一个应用程序permission type:app folder,然后添加了相关设置。
这是我的设置:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
DEBUG = False
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_filters',
'website',
'storages',
)
# for dropbox
DEFAULT_FILE_STORAGE = 'storages.backends.dropbox.DropBoxStorage'
DROPBOX_OAUTH2_TOKEN = 'my_generated_token_from_dropbox'
DROPBOX_ROOT_PATH = 'media'
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
)
Run Code Online (Sandbox Code Playgroud)
为了能够将媒体文件上传到 Dropbox(并阅读它们),必须在设置代码中更改哪些内容?
我正在尝试使用 django-storages使用 SFTP访问我的“Hetzner”存储盒( https://www.hetzner.com/storage/storage-box),它应该保存媒体数据,即我的网站用户可以访问的图像文件动态上传。
我的文件的相应部分settings.py如下所示:
DEFAULT_FILE_STORAGE = 'storages.backends.sftpstorage.SFTPStorage'
SFTP_STORAGE_HOST = 'username.your-storagebox.de'
SFTP_STORAGE_ROOT = '/media'
SFTP_STORAGE_PARAMS = {
'username': 'username',
'password': 'password',
'allow_agent': False,
'look_for_keys': False,
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当用户上传图像时,它被放置在存储空间上,我可以使用 SFTP 确认。但从存储盒获取图像失败,没有图像显示。控制台摘录:
[03/Sep/2021 22:34:01] "GET /media/filename.jpg HTTP/1.1" 404 1962
Run Code Online (Sandbox Code Playgroud)
我可以发现 Django 仍在我的内部查找MEDIA_DIR文件。再次,我的设置的相应部分:
MEDIA_DIR = 'media'
MEDIA_ROOT = os.path.join(BASE_DIR, MEDIA_DIR)
MEDIA_URL = '/media/'
Run Code Online (Sandbox Code Playgroud)
简而言之:使用 SFTP 似乎可以将文件存储到存储中,但再次获取它们却失败了。
编辑:根据要求,我将提供更多代码片段
models.py::
class SizeRestrictedImageField(ImageField):
def __init__(self, *args, **kwargs):
self.max_upload_size = kwargs.pop('max_upload_size', 0)
super().__init__(*args, **kwargs)
def clean(self, *args, **kwargs):
data = super().clean(*args, …Run Code Online (Sandbox Code Playgroud)