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

如何调整图片大小并通过save函数保存至存储?如何修改save函数解决上传报错?

问题1:调整图片大小并通过save函数保存到存储

步骤与代码示例

假设使用Python的Pillow库处理图片,结合自定义存储服务的save函数:

  1. 先安装依赖:
pip install pillow
  1. 图片尺寸调整与保存逻辑:
from PIL import Image
import io

def resize_and_save_image(image_file, target_size=(800, 600), storage_service=None):
    # 打开图片文件
    with Image.open(image_file) as img:
        # 保持宽高比调整尺寸(若需强制固定尺寸,直接替换为img.resize(target_size))
        img.thumbnail(target_size)
        
        # 将调整后的图片转为字节流
        buffer = io.BytesIO()
        # 保留原图片格式,无格式时默认用JPEG
        img_format = image_file.name.split('.')[-1].upper() if '.' in image_file.name else 'JPEG'
        img.save(buffer, format=img_format)
        buffer.seek(0)
        
        # 调用存储服务的save函数完成保存
        if storage_service:
            # 假设存储服务的save方法接收文件名和字节流参数
            return storage_service.save(f"resized_{image_file.name}", buffer)
问题2:修改save函数解决上传报错

常见报错场景及对应修改方案

结合图片上传的高频问题,给save函数添加格式校验、大小限制、路径处理和异常捕获逻辑:

import os
import io

def save(self, name, content, max_size=5*1024*1024):
    # 1. 校验图片格式
    allowed_formats = {'JPEG', 'PNG', 'GIF', 'WEBP'}
    file_format = content.name.split('.')[-1].upper() if '.' in content.name else ''
    if file_format not in allowed_formats:
        raise ValueError("仅支持JPEG/PNG/GIF/WEBP格式的图片")
    
    # 2. 校验文件大小
    content.seek(0, io.SEEK_END)
    file_size = content.tell()
    content.seek(0)
    if file_size > max_size:
        raise ValueError(f"图片大小不能超过{max_size//1024//1024}MB")
    
    # 3. 处理重复文件名,避免覆盖
    base_name, ext = os.path.splitext(name)
    counter = 1
    while self.exists(name):
        name = f"{base_name}_{counter}{ext}"
        counter += 1
    
    # 4. 捕获存储过程中的异常,明确报错信息
    try:
        # 执行原存储逻辑(如写入本地路径/云存储桶)
        return super().save(name, content)
    except Exception as e:
        raise RuntimeError(f"图片上传失败: {str(e)}") from e

额外说明

  • 若使用框架自带存储服务(如Django的FileSystemStorage),可通过继承原存储类并重写save方法实现上述逻辑
  • 若报错源于权限问题,需确认存储路径/云存储桶的写入权限;若为网络波动,可在try块中添加重试机制

内容的提问来源于stack exchange,提问作者Pouria sh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:01:11