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
相关产品推荐
相关产品推荐

