我正在尝试将文件写入具有 FileField 的 Django 模型。此文件已从 GDAL 处理。假设我有这个模型。我观察
file
字段并处理图像,然后将生成的图像保存到 file_cloud_geotiff
.
#models.py
class Layer(models.Model):
name = models.CharField(max_length=50, blank=True)
file = models.FileField(
upload_to='layers',
null=True,
max_length=500)
file_cloud_geotiff = models.FileField(
upload_to='cloudgeotiff',
null=True,
blank=True,
max_length=500)
def __str__(self):
return self.name
在我的任务中,我有一个转换保存文件的功能。
#tasks.py
from osgeo import gdal
def convert_to_cloud_geotiff(obj_id):
instance = Layer.objects.get(pk=obj_id)
geotif = instance.file.path
src_ds = gdal.Open(geotif)
translate_options = gdal.TranslateOptions(format='COG', creationOptions=['COMPRESS=LZW'])
name = os.path.basename(instance.file.name)
des_ds = '/vsimem/{}'.format(name)
ds = gdal.Translate(des_ds, src_ds, options=translate_options)
# Write variable ds to Layer's file_cloud_geotiff
我所知道的是,在这种情况下,结果或数据集存储到变量
ds
。我想将该数据集写入模型其他文件字段。结果也从内存文件中保存des_ds = '/vsimem/{}'.format(name)
。但是,这个mem文件是不可访问的,无法打开,因此可以写入文件字段。
如何利用数据集对象
ds
写入 Django 文件字段?