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

Django开发摩尔纹检测网站时Pillow读取media文件报错找不到路径

问题原因

你调用default_storage.url(fname2)获取到的是面向Web访问的相对URL路径(格式为/media/xxx.jpg),并非本地文件系统的物理绝对路径。Image.open()需要传入本地磁盘的真实路径,操作系统无法识别/media/开头的Web路径,因此抛出找不到文件的错误。

解决方案

提供两种可选修复方式,按需选择即可:

方式1:直接读取内存中的上传文件(最优)

不需要先将文件落盘再读取,直接处理内存里的上传文件对象,节省磁盘IO开销:

from django.core.files.storage import default_storage
from PIL import Image

def index(request):
    if request.method == 'POST':
        f = request.FILES['sentFile']
        response = {}
        # 直接读取上传文件对象,不需要先存盘
        image = Image.open(f)
        pred_label = moire_detect(image)
        # 如果有保留文件的需求,再执行保存逻辑
        fname = 'pic.jpg'
        fname2 = default_storage.save(fname, f)
        file_url = default_storage.url(fname2)
        response['label'] = pred_label
        return render(request, 'frontpage.html', response)
    else:
        return render(request, 'frontpage.html')

方式2:获取文件本地物理路径

如果必须先保存文件再处理,调用default_storage.path()方法替代url()方法,获取本地真实路径:

# 替换原来的file_url相关代码
fname2 = default_storage.save(fname, f)
# 获取本地绝对路径,而不是Web URL
file_path = default_storage.path(fname2)
image = Image.open(file_path)
pred_label = moire_detect(image)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:15:08