Flask应用中用Pydicom读取DICOM图像时出现‘File not found’错误的原因与解决
问题:Flask上传DICOM图像时出现FileNotFoundError错误
错误原因
- 表单未配置文件上传编码:HTML表单上传文件时必须设置
enctype="multipart/form-data",否则浏览器仅会传递文件名而非文件内容,后端无法获取实际的文件数据。 - 错误的文件获取方式:
request.form["input_image"]只能拿到客户端上传的文件名,而非文件对象或临时存储路径。dcm.read_file()尝试在服务器本地读取该文件名对应的文件,但服务器上不存在此文件,因此触发FileNotFoundError。
解决方法
1. 修正HTML表单配置
更新index.html中的表单标签,添加enctype="multipart/form-data"属性,确保浏览器正确发送文件数据:
<html> <body> <h1>Pneumonia Detection</h1> Please upload the image in DICOM format here <form action="/sub" method="POST" enctype="multipart/form-data"> <p>Input Image</p> <input type="file" name="input_image" placeholder="Input Image"> <input type="submit"> </form> </body> </html>
2. 调整Flask后端文件处理逻辑
使用request.files获取上传的文件对象,直接传递给pydicom读取(pydicom支持直接读取文件对象),或选择保存到服务器后再读取:
方式一:直接读取文件对象(推荐)
@app.route("/sub", methods=["POST"]) def submit(): if request.method == "POST": # 获取上传的文件对象 img_file = request.files["input_image"] if img_file.filename == '': return "No file selected" # 直接读取文件内容 img_data = dcm.read_file(img_file, force=True) # 后续肺炎检测逻辑... return "File processed successfully"
方式二:保存文件到服务器后读取
import os @app.route("/sub", methods=["POST"]) def submit(): if request.method == "POST": img_file = request.files["input_image"] if img_file.filename == '': return "No file selected" # 创建uploads目录(如果不存在) upload_dir = "./uploads" if not os.path.exists(upload_dir): os.makedirs(upload_dir) # 保存文件到服务器 save_path = os.path.join(upload_dir, img_file.filename) img_file.save(save_path) # 从保存路径读取DICOM文件 img_data = dcm.read_file(save_path, force=True) # 后续肺炎检测逻辑... return "File processed successfully"
内容的提问来源于stack exchange,提问作者Ninad Mahajan
相关产品推荐
相关产品推荐

