标签: django-storage

使用django-storage和boto保存另一个具有相同名称的文件

我有一个模型,ProfileImageField与之相关联.

使用和将映像上载到AWS S3存储桶以进行存储.django-storagesboto

如果我上传一个文件名已经存在的图像(eg: sample.png)Django默认会保存新文件,sample_1.png因为在将图像上传到AWS S3时它不起作用.有没有办法解决这个问题?

如何在AWS S3不覆盖的情况下上传具有现有文件名的图像?

django amazon-s3 boto django-storage

4
推荐指数
1
解决办法
1193
查看次数

在 python 中添加文件名的动态内容处置(amazon S3)

我有一个 Django 模型,将文件名保存为“uuid4().pdf”。其中 uuid4 为创建的每个实例生成一个随机 uuid。该文件名也以相同的名称存储在亚马逊 s3 服务器上。

我正在尝试为我上传到 amazon s3 的文件名添加自定义配置,这是因为每当我下载文件而不是 uuid 文件时,我希望看到自定义名称。同时,我希望文件以 uuid 文件名存储在 s3 上。

所以,我将django-storages与 python 2.7 一起使用。我尝试在这样的设置中添加 content_disposition:

AWS_CONTENT_DISPOSITION = 'core.utils.s3.get_file_name'
Run Code Online (Sandbox Code Playgroud)

其中 get_file_name() 返回文件名。

我也尝试将其添加到设置中:

AWS_HEADERS = {
'Content-Disposition': 'attachments; filename="%s"'% get_file_name(),

 }
Run Code Online (Sandbox Code Playgroud)

没有运气!

你们中有人知道要实施这个吗?

python django amazon-s3 amazon-web-services django-storage

4
推荐指数
1
解决办法
4280
查看次数

使用 docker compose,如何使用相同的地址在内部和外部访问服务?

我的问题归结为:我在 docker compose:app和中有两个服务storage我正在寻找一种使用相同地址从应用程序内部外部访问storage服务(端口 9000)的方法。

app是一个使用 django-storages 和 S3 后端的 Django 应用程序。 storage是一个minio服务器(S3兼容,仅用于开发)。

app,我可以storage使用http://storage:9000进行访问。从外部 docker,我可以访问storagehttp ://localhost:9000http://0.0.0.0:9000,甚至可以访问http://192.168.xxx.yyy(使用网络上的不同设备)。那里没有什么惊喜。

但是,当生成 URL 时,我不知道它是要在内部使用还是在外部使用(或两者兼而有之)。

docker-compose.yml

services:

  app:
    build: backend/
    ports:
      - "8000:8000"
    volumes:
      - ./backend/src:/app/src
    command: /usr/local/bin/python src/manage.py runserver 0.0.0.0:8000

  storage:
    image: minio/minio:RELEASE.2019-06-19T18-24-42Z
    volumes:
      - storage:/data
    environment:
      MINIO_ACCESS_KEY: "DevelopmentAccessKey"
      MINIO_SECRET_KEY: "DevelopmentSecretKey"
    ports:
      - "9000:9000"
    command: minio server /data

volumes:
  storage:

Run Code Online (Sandbox Code Playgroud)

我已经研究过更改后端以根据上下文生成端点 url,但这远非微不足道(并且仅用于开发,生产使用外部 …

django django-storage docker docker-compose

4
推荐指数
1
解决办法
2729
查看次数

使用django-pipeline,s3boto和storages的SignatureDoesNotMatch Amazon S3不一致

我有两个由django-pipeline编译的文件以及s3boto:master.css和master.js.它们在我的桶中设置为"公共".但是,当我访问它们时,有时会提供master.css,有时它会使用SignatureDoesNotMatch.与master.js相同.这不会发生在Chrome上.我能错过什么?

编辑:它现在也发生在Chrome上.

python django amazon-s3 boto django-storage

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

在将django-storage和django-compressor一起使用时尝试压缩静态文件时出错

我已经设置了一个AWS S3存储桶,以便使用应用程序django-storage在远程CDN中传输我的静态文件,一切正常,直到我尝试压缩我的静态文件,然后使用django_compressor上传到S3.

我根据django-storages的django_compressor文档设置了所有变量(https://django_compressor.readthedocs.org/en/latest/remote-storages/index.html)

我使用'manage.py collectstatic'上传了S3中的所有文件,然后:

当我'manage.py compress'时,我收到此错误:

CommandError: An error occured during rendering ../templates/base.html: 'https://my_bucket.s3.amazonaws.com/css/bootstrap.2.3.1.css' isn't accessible via COMPRESS_URL ('https://my_bucket.s3-external-3.amazonaws.com/') and can't be compressed
Run Code Online (Sandbox Code Playgroud)

我的设置有什么问题?

这是我的django-storages和django_compressor的settings.py配置:

COMPRESS_URL = 'https://mybucket_name.s3-external-3.amazonaws.com/'
STATIC_URL = COMPRESS_URL
DEFAULT_FILE_STORAGE = 'my_project.boto_custom.CachedS3BotoStorage'

AWS_ACCESS_KEY_ID = 'XXX'
AWS_SECRET_ACCESS_KEY = 'XXX'
AWS_STORAGE_BUCKET_NAME = 'mybucket_name'

COMPRESS_ROOT = STATIC_ROOT

COMPRESS_STORAGE = 'my_project.boto_custom.CachedS3BotoStorage'
STATICFILES_STORAGE = 'my_project.boto_custom.CachedS3BotoStorage'

COMPRESS_OFFLINE = True
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

python django amazon-s3 django-storage django-compressor

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

将 s3 文件限制为 Django 组用户

在 django-storages 第三方应用程序的帮助下,我的 Web 应用程序使用 Amazon S3 将所有媒体文件存储在我的 djagno Web 应用程序中。

我的数据库处理文件夹和文件层次结构,每个用户只看到属于他的组的链接。

但!S3 上的其他文件夹没有权限。

例如: 用户 1:组是 group1 用户 2:组是 group2 s3 链接:https: //s3.amazonaws.com/ /media/group1/folder1/1.png

用户 1 将在应用程序内的他的页面上看到此内容。用户 2 将看不到此链接,但如果他尝试访问此链接,则该文件没有权限,并且可以轻松下载。

我的目标是限制每个组的文件夹权限。

有基于我的 aws 密钥的自动解决方案吗?我迷路了...

python django amazon-s3 amazon-web-services django-storage

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

Django image.save()TypeError:get_valid_name()缺少位置参数:'name'

这是我尝试过的:

r = requests.get(img_url)
temp = NamedTemporaryFile(delete=True)
temp.write(r.content)
temp.flush()
image = Image()
image.image.save('testimagefilename', File(temp), save=True)
image.save()
Run Code Online (Sandbox Code Playgroud)

image.image.save()线路的错误跟踪:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib64/python3.4/site-packages/django/db/models/fields/files.py", line 90, in save
    name = self.field.generate_filename(self.instance, name)
  File "/usr/local/lib64/python3.4/site-packages/django/db/models/fields/files.py", line 332, in generate_filename
    return os.path.join(self.get_directory_name(), self.get_filename(filename))
  File "/usr/local/lib64/python3.4/site-packages/django/db/models/fields/files.py", line 322, in get_filename
    return os.path.normpath(self.storage.get_valid_name(os.path.basename(filename)))
TypeError: get_valid_name() missing 1 required positional argument: 'name'
Run Code Online (Sandbox Code Playgroud)

问题是因为Django期待本地操作系统路径吗?我正在使用S3BotoStorage,ImageField正在使用项目其余部分的独立存储桶:

image = models.ImageField(storage=S3CustomStorage)

class S3CustomStorage(S3BotoStorage):
    def __init__(self, *args, **kwargs):
        kwargs['bucket'] = getattr(settings, 'AWS_BUCKET_CUSTOM')
        super(S3CustomStorage, …
Run Code Online (Sandbox Code Playgroud)

django django-models boto django-storage

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

试图理解Django源代码和缺少参数TypeError的原因

如果您有垂直监视器,我的IDE和Traceback 的屏幕截图(纵向视图)显示此处粘贴的所有代码可能更容易阅读.

上下文:尝试ImageField使用S3BotoStorage 将图像从URL保存到EC2上托管的Django ,并使用S3上的文件.我很困惑,因为所有这些都表明Django仍然像本地存储一样对待它,而它应该是S3.

有问题的行似乎导致了错误:

def get_filename(self, filename):
    return os.path.normpath(self.storage.get_valid_name(os.path.basename(filename)))

def get_valid_name(self, name):
    """
    Returns a filename, based on the provided filename, that's suitable for
    use in the target storage system.
    """
    return get_valid_filename(name)
Run Code Online (Sandbox Code Playgroud)

TypeError异常: get_valid_name() missing 1 required positional argument: 'name'

最后一个本地变量在错误之前跟踪get_valid_name:

filename        'testimagefilename'
self        <django.db.models.fields.files.ImageField: image>
Run Code Online (Sandbox Code Playgroud)

(只有这两个水平分隔线内的东西来自我,其余来自Django 1.9)

image.image.save('testimagefilename', File(temp), save=True)
Run Code Online (Sandbox Code Playgroud)

来自Traceback的本地变量(不确定ValueErroron image,我认为是因为它尚未创建):

File        <class 'django.core.files.base.File'>
image       Error in formatting: ValueError: The 'image' attribute has no file associated with …
Run Code Online (Sandbox Code Playgroud)

python django boto django-storage

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

使用django-storage上传静态文件时有选择地应用AWS Headers

我想根据我的文件类型和文件名模式选择性地应用AWS标头,同时将它们上传到S3源.我正在使用django-storage与django 1.8.12

我可以在django- storages 文档中看到设置AWS_HEADERS ,但我似乎无法找到在某些文件上应用此设置的方法.如果有人可以指导我,我将不胜感激

django amazon-s3 django-storage

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

如何使用 Heroku 上的 Django 将位于 URL 的图像保存到 S3?

我正在将 django-storages 用于 Heroku 上托管的项目。我已经配置了 django-storages,现在可以很好地从 S3 提供静态文件。

我想以编程方式获取位于 URL 的图像并将其上传到 S3 并将其与模型相关联。

我知道如何使用 urlib2 或 requests 从 url 下载文件。

我想知道的是如何最好地将该图像放到 S3 上并让我可以将其与我的模型和相关模板一起使用。文件大小不确定,但可能总是小于 10MB。

我的问题归结为:

  • 如何将位于 url 的图像放到 S3 上?
  • 一旦图像在 S3 上,我如何将该图像与模型相关联?
  • 由于 Heroku 的任何固有限制,有没有办法避免保存到 Heroku 存储并将文件“流”到 S3……或者这不是问题吗?

django heroku amazon-s3 django-storage

2
推荐指数
1
解决办法
1307
查看次数