标签: python-django-storages

带有多个S3存储桶的django存储

我正在使用AWS,我的应用程序中会有不同的存储桶.我也在使用Django-Storages.有没有办法指定我要将文件上传到哪个存储桶(例如,作为Save()函数中的参数或其他什么?)

我看到这个Django - 导入storages.backends时出错,但我不明白它应该如何使用?!

谢谢!

django amazon-web-services python-django-storages

23
推荐指数
4
解决办法
6924
查看次数

Django存储 - 无法加载亚马逊的S3绑定错误

嘿所以试图将我的用户上传的图像连接到我的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

14
推荐指数
2
解决办法
7021
查看次数

如何使用 django-storages 生成预签名的 S3 url?

我有一个 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)

python django boto3 python-django-storages

14
推荐指数
1
解决办法
1万
查看次数

Django-Storages S3,以 minio 作为后端

我想将 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)

也许有人已经这样做了?

python django python-django-storages

12
推荐指数
1
解决办法
8887
查看次数

将Django-Storage与amazon S3和https一起使用

我们有一个使用django-storages上传到AWS的图像上传器.现在它通过http发送图像,但我们希望它使用https.

谷歌搜索并没有帮助我找到一种方法来配置django-storage来做到这一点.有没有人知道实现这一目标的最佳方法,或任何能指明我正确方向的文档.

python django python-django-storages

9
推荐指数
1
解决办法
2383
查看次数

django-storages和amazon s3 - 可疑操作

我在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 amazon-s3 python-django-storages

9
推荐指数
1
解决办法
2269
查看次数

Django存储:导入错误 - 没有名为存储的模块

我正在尝试使用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)

我究竟做错了什么?

django amazon-s3 boto python-django-storages

7
推荐指数
3
解决办法
1万
查看次数

django-storges 支持 CloudFront 签名 URL

我想使用CloudFront 的签名 URL而不是普通的未签名 URL。

django-storages提供了选项,AWS_S3_CUSTOM_DOMAIN但随后它会从 CloudFront 的子域生成未签名的 URL。默认情况下AWS_QUERYSTRING_AUTHTrue,它并生成S3签署的网址。为 CloudFront 生成签名 URL 的任何方式。

这是我希望打开的设置,但由于未签名的 URL,我禁用了它。
我希望为我的发行版打开的设置

django amazon-web-services amazon-cloudfront boto3 python-django-storages

6
推荐指数
1
解决办法
583
查看次数

如何在 Dropbox 上使用 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(并阅读它们),必须在设置代码中更改哪些内容?

python django dropbox python-django-storages

5
推荐指数
1
解决办法
1926
查看次数

使用 SFTP 的 Django 存储:GET 请求失败

我正在尝试使用 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)

django sftp django-storage python-django-storages

5
推荐指数
1
解决办法
1839
查看次数