gpt4 book ai didi

python - 如何将图像从其路径保存到 FileField?

转载 作者:行者123 更新时间:2023-12-02 03:43:22 24 4
gpt4 key购买 nike

我的 media/logo/ 文件夹中存储了一个图像,我想将其从我的模型保存到模型的 FileField 中看法。这是我尝试过的方法,但遇到编码错误,并且在尝试保存文件后文件已损坏。

UnicodeDecodeError: 'charmap' codec can't decode byte ...


views.py:

def save_records(request):
new_path = os.path.join(settings.MEDIA_ROOT, 'logo', filename)
same_file = File(new_path, filename)
Company.objects.create(logo=same_file)

我无法理解如何将 new_path 中的文件保存到 FileField,有什么想法吗?

最佳答案

如果您希望 FileField 使用现有文件而不是创建新文件。

def save_records(request):
c = Company()
c.logo.name = 'logo/<filename>' #relative to the media root.
c.save()

并且,如果您想修改现有记录的文件名

old_path = c.logo.path
c.logo.name = 'logo/<new filename>' #relative to the media root.
new_path = settings.MEDIA_ROOT + c.logo.name
os.rename(old_path, new_path)
c.save()

如果您想将内容复制到新文件,请使用@Roman Miroshnychenko 的解决方案。

Django 的 FileField 内部使用 FileSystemStorage存储和管理文件,这样你就可以覆盖它的行为。这将确保 Django 始终使用提供的文件名,而不是生成新的文件名。

from django.core.files.storage import FileSystemStorage

class CustomFileStorage(FileSystemStorage):

def get_available_name(self, name):
return name # returns the same name

在你的模型中

from app.storage import CustomFileStorage

fs = CustomFileStorage()

class Company(models.Model):
logo = model.FileField(storage=fs)

关于python - 如何将图像从其路径保存到 FileField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47729870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com