我需要将图像上传到 Django ImageField,但由于基于第三方 API 的限制,我需要将图像上传到没有子目录的媒体目录。
限制是由于本地存储的文件名(在 imagefield 列中)用于计算哈希以从媒体 API 请求该图像,因此该字段必须包含与 API 中的文件名相同的名称,不幸的是API 文件名不能包含斜杠。
我无法在数据库中添加一个字段来存储真实的文件名,也无法控制返回计算哈希的代码。
我尝试使 upload_to 成为一个返回空字符串的可调用对象,这似乎绕过了 upload_to 所需的错误,但是图像都被保存为 ''(blank) _1, _2 ... etc 没有图像的其余部分姓名。
我也试过让upload_to返回'/'、'../media'、'../media/'都无济于事(各种错误或格式错误的文件名)
那么 TL;DR 如何在没有子目录的情况下将图像直接保存到 MEDIA_ROOT?
编辑,额外信息:
所以我只是尝试了一个小技巧来完成它的一部分:
from django.core.files.storage import FileSystemStorage
media_root_store = FileSystemStorage(location='/path/to/media/parent')
class MyModel(models.Model):
img_file = models.ImageField(
max_length=255,
upload_to='media',
storage=media_root_store)
这个肮脏的黑客将图像保存到正确的位置,尽管它仍然明显地保存了带有 media/ 附加的图像路径。所以我不确定它是否真的让我更接近了。