You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Django REST Framework将生成的TIFF文件上传至Cloudinary

解决方案

1. 配置Cloudinary Django环境

首先安装依赖包:

pip install cloudinary django-cloudinary-storage

在Django项目的settings.py中添加配置:

INSTALLED_APPS = [
    # 其他已有的APP
    'cloudinary',
    'cloudinary_storage',
]

# Cloudinary配置,替换为你的账号信息
CLOUDINARY_URL = "cloudinary://<API_KEY>:<API_SECRET>@<CLOUD_NAME>"

# 可选:设置默认文件存储为Cloudinary
DEFAULT_FILE_STORAGE = 'cloudinary_storage.storage.RawMediaCloudinaryStorage'

2. 上传TIFF文件到Cloudinary

方式一:直接在内存中生成并上传(推荐,避免本地文件IO)

修改你的TIFF生成逻辑,用BytesIO代替本地文件路径,直接将内存流上传到Cloudinary:

from io import BytesIO
import cloudinary.uploader
import rasterio

# 将TIFF数据写入内存流
output_stream = BytesIO()
with rasterio.open(
    output_stream, 'w', driver='GTiff', height=500, width=500, count=1, dtype='float32',
    crs='EPSG:4326', transform=rasterio.transform.from_bounds(*box2, 500, 500)
) as ndvi_image:
    ndvi_image.write(image, 1)

# 重置流指针到起始位置
output_stream.seek(0)

# 上传到Cloudinary
upload_response = cloudinary.uploader.upload(
    output_stream,
    resource_type="raw",  # TIFF属于原始文件类型,必须指定此参数
    public_id="ndvi/ndviimage",  # 自定义存储路径和文件名,避免重复
    overwrite=True  # 允许覆盖同名文件
)

# 上传成功后可获取文件的安全URL等信息
secure_url = upload_response['secure_url']

方式二:上传已保存的本地TIFF文件

如果需要保留本地文件,可在生成文件后直接上传:

import cloudinary.uploader
import rasterio

# 你的本地文件生成代码
ndvi_image = rasterio.open(
    'ndviimage.tif', 'w', driver='GTiff', height=500, width=500, count=1, dtype='float32',
    crs='EPSG:4326', transform=rasterio.transform.from_bounds(*box2, 500, 500)
)
ndvi_image.write(image, 1)
ndvi_image.close()

# 上传本地文件
upload_response = cloudinary.uploader.upload(
    'ndviimage.tif',
    resource_type="raw",
    public_id="ndvi/ndviimage",
    overwrite=True
)

3. 结合Django ORM使用(可选)

如果需要将TIFF文件关联到Django模型,可使用CloudinaryField:

# models.py
from django.db import models
from cloudinary.models import CloudinaryField

class NDVIRecord(models.Model):
    tiff_file = CloudinaryField(resource_type='raw')
    # 其他字段...

# 视图中使用
from .models import NDVIRecord

# 生成内存流后
output_stream.seek(0)
record = NDVIRecord()
record.tiff_file.save('ndviimage.tif', output_stream, save=True)

内容的提问来源于stack exchange,提问作者Zafar Ijaz Khan Niazi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:09:23