- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有 Django Rest Framework 的 API 端点来上传图像。
class MyImageSerializer(serializers.ModelSerializer):
image = serializers.ImageField(source='image')
我可以上传图片,但它们是用客户端发送的文件名保存的,这可能会导致冲突。我想改为使用时间戳文件名将文件上传到我的 CDN。
生成文件名不是问题,只是用它保存图像。
有人知道怎么做吗?谢谢。
最佳答案
如果您的图像类型为 ImageField来自django,那么你真的不需要做任何事情,甚至不需要像你那样在你的序列化程序中声明它。将它添加到 fields 属性中就足够了,django 将处理冲突。这意味着 django 将在每个可能产生冲突的新文件上添加 _index,因此如果您上传一个名为 'my_pic.jpg' 的文件 5 次,您实际上将拥有文件 'my_pic.jpg', ' my_pic_1.jpg'、'my_pic_2.jpg'、'my_pic_3.jpg'、'my_pic_4.jpg' 在您的服务器上。
现在,这是使用 Django 的 FileSystemStorage 实现完成的(参见 here ),但是如果您希望它在您的文件名后附加一个时间戳,您所要做的就是编写一个存储类,在其中覆盖 get_available_name(name) 方法。示例:
class MyFileSystemStorage(FileSystemStorage):
def get_available_name(self, name):
''' name is the current file name '''
now = time.time()
stamp = datetime.datetime.fromtimestamp(now).strftime('%Y-%m-%d-%H-%M-%S')
return '{0}_{1}'.format(name, str(stamp))
以及模型中的图像字段:
image = models.ImageField(upload_to='your upload dir', storage= MyFileSystemStorage)
自 2014 年 8 月 20 日起,这不再是问题,因为 Django found a vulnerability related to this behaviour (感谢@mlissner 指出)。重要摘录:
We’ve remedied the issue by changing the algorithm for generating file names if a file with the uploaded name already exists. Storage.get_available_name() now appends an underscore plus a random 7 character alphanumeric string (e.g. "_x3a1gho"), rather than iterating through an underscore followed by a number (e.g. "_1", "_2", etc.).
关于Django rest Framework,更改ImageField的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25128758/
我需要从表单中裁剪出抢救出来的图片,存入model.ImageField 我的模型.py class Story(models.Model): creator = models.ForeignKe
我现在尝试了几个小时来使用 South 进行最愚蠢的迁移,但不知何故,我一直在悲惨地失败......我正在尝试迁移到 Sorl-Thumbnail。 这是我的过渡模型: class Deal(mode
我正在创建一个 django 项目,其中我使用 ImageField 将图片(图像)存储在数据库中... original_pic = models.ImageField() 另外,我想存储一个包含相
我正在尝试将自定义 upload_to 函数传递给我的模型 imageField 但我想将该函数定义为模型函数....这可能吗? class MyModel(models.Model): ..
我正在尝试使用 Django 2.0。我现在正在使用开发“runserver”,所以请记住我还没有投入生产。我熟悉两者在静态文件方面的区别。 我有一个博客文章模型。在管理员中,我希望能够使用 Imag
我正在尝试检测对 ImageField 的更改,以便以编程方式将更改与 Hg 同步。包含 ImageField 的模型正在使用 Django 多语言进行本地化,因此我必须单独检测每个字段的更改,而不是
我的models.py中有以下图像字段(见下面的代码) 我要集 图像的固定宽度和高度,所以它总是 100x100px 下面的代码是系统中已有的代码,我不确定宽度和高度是如何传递的,或者此代码是否可用于
我一直在尝试实现为个人用户更改头像的图片上传。我现在遇到的问题是它永远不会上传到文件夹中。它适用于管理员,但不适用于我创建的模板 views.py if 'avatar_upload' in requ
我有一个模型和一个表单 (forms.ModelForm),其中有一个 ImageField。该模型类似于: class Business(models.Model): business_na
我一直在尝试实现为个人用户更改头像的图片上传。我现在遇到的问题是它永远不会上传到文件夹中。它适用于管理员,但不适用于我创建的模板 views.py if 'avatar_upload' in requ
我有一个程序在后台运行,它将图像输出到我的服务器上的特定文件夹,并且这可能会以不同的时间间隔发生。我需要能够在模板上显示这些图像,因此我想使用 ImageField 将它们保存到数据库中。 我的问题是
保存模型“产品”后,我希望上传的图像与 pk 的名称相同,例如 22.png 或 34.gif 我不想仅更改名称的图像格式。如何才能做到这一点?到目前为止我的模型示例...... image = mo
我有模型 UserProfile 和字段 avatar = models.ImageField(upload_to=upload_avatar) upload_avatar 函数根据user.id 命
我正在使用 Django 构建个人摄影网站。我正在处理 models.py。我的应用名为“photoViewer”,网站名为“photoSite”。但是,当我运行 makemigrations 时,我
我有一个问题,我的模型中有一个ImageField,我想从url示例http://www.google.com/images/logos/ps_logo2.png上传此图像,我该怎么做? 谢谢 ! 最
我将原始数据数组 (RGBA8888) 从应用程序(C++ 中)发送到以 base64 编码的 http 发布数据中的 django 服务器,例如: field1=value1&prof_img=KS
我已经配置了 MEDIA_ROOT 和 MEDIA_URL 并且工作正常。我的 MEDIA 文件存储在名为 /media/ 的目录中,现在我想将新上传的 文件存储到新目录(例如。/media2/) 而
我想在我的模型的管理表单中有一个 ImageField(例如,个人资料)。我想稍后在 View 中显示此图像。 这是我的模型: class Individual(models.Model):
我是 Django 的新手。我在文档和这个网站上阅读了很多关于我的问题的内容。但我真的不明白我该怎么做才能做到这一点。有人可以告诉我所有步骤吗? model.py: class Post(models
我正在寻找一种在保存 ImageField 时调整大小、压缩和优化上传图像的方法。 class Image(models.Model): name = models.CharField(max
我是一名优秀的程序员,十分优秀!