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

Python如何将URL来源的图片保存到指定路径并以uuid命名?

问题原因

你调用urllib.request.urlretrieve(url, file_name)时只传入了独立文件名,没有拼接预设的存储目录路径,系统会默认将文件写入当前工作目录(即项目根目录),这是路径参数传递错误导致的。

解决方法

你需要将创建的存储目录和文件名拼接为完整的绝对路径,再传给urlretrieve的第二个参数即可,完整实现代码如下:

import os
import uuid
import urllib.request
from django.conf import settings

# 假设此处已完成Profile实例保存,实例名为profile
root_dir = os.path.join(settings.MEDIA_ROOT, 'profile')
new_dir = str(profile.id)
save_dir = os.path.join(root_dir, new_dir)
# 新增exist_ok=True参数,避免同一profile目录已存在时抛出异常
os.makedirs(save_dir, exist_ok=True)

# 假设image_urls为传入的图片URL列表,支持单/多个URL处理
for img_url in image_urls:
    file_name = f"{uuid.uuid4()}.jpeg"
    # 拼接完整存储路径,这是你之前缺失的关键步骤
    full_save_path = os.path.join(save_dir, file_name)
    # 下载到指定路径
    urllib.request.urlretrieve(img_url, full_save_path)

    # 如果你需要将图片路径存入数据库做关联,建议存储相对MEDIA_ROOT的路径,方便后续通过MEDIA_URL访问
    # 相对路径示例:relative_path = f"profile/{profile.id}/{file_name}"

补充注意事项

  • 生产环境使用建议增加异常捕获逻辑,处理URL无法访问、网络超时、磁盘写入失败等异常情况,避免程序崩溃
  • 如果图片URL可能返回png、webp等其他格式,不要固定写死.jpeg后缀,可以通过请求响应头的Content-Type字段判断正确的文件后缀,避免文件格式不匹配
  • 也可以直接使用Django内置的File、ImageField相关存储工具实现,更符合Django项目的开发规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:09:01