Flask中使用webkitdirectory上传文件夹无法定位指定文件求助
修复webkitdirectory上传文件夹后Flask无法找到目标JSON文件的问题
问题诊断
文件名被拆分为单个字符,说明后端代码错误地将文件对象的文件名当成字符串遍历,而非处理上传的文件列表。常见原因是直接遍历request.files中单个文件的文件名字符,而非通过getlist()获取所有上传文件并遍历文件对象。
修复步骤
1. 确认前端HTML代码正确性
确保上传input标签正确配置webkitdirectory和multiple属性,且name属性唯一:
<input type="file" name="uploaded_files" webkitdirectory multiple>
2. 修正Flask后端文件处理逻辑
使用request.files.getlist()获取所有上传的文件对象,遍历文件对象而非文件名字符:
from flask import Flask, request app = Flask(__name__) @app.route('/upload', methods=['POST']) def process_upload(): # 获取所有上传的文件列表 uploaded_files = request.files.getlist('uploaded_files') target_file = None for file in uploaded_files: # 注意:webkitdirectory上传的文件名会包含相对路径,用endswith匹配更可靠 if file.filename.endswith('your_search_history.json'): target_file = file break if not target_file: return "your_search_history.json not found", 404 # 读取目标文件内容(示例) file_content = target_file.read() # 此处添加生成图表的逻辑... return "目标文件已找到并处理完成"
3. 排查常见错误点
- 避免直接遍历文件名字符串:不要写
for char in request.files['uploaded_files'].filename,这会逐个遍历文件名的字符。 - 保持前后端name属性一致:前端input的name值需与后端
getlist()中的参数完全匹配。 - 处理带路径的文件名:webkitdirectory上传时,文件名会包含文件夹内的相对路径(如
docs/your_search_history.json),使用endswith()而非直接等于文件名来匹配。
内容的提问来源于stack exchange,提问作者Muoi
相关产品推荐
相关产品推荐

