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

Flask API无法识别文件夹输入,音频批量转录功能异常排查

问题分析与解决方案

核心问题根源

  1. 后端逻辑错误:你错误地认为前端会传递名为folder的表单字段,但实际上开启webkitdirectory后,浏览器会把文件夹内的所有文件作为多文件上传,不会发送文件夹路径到request.form,导致后端永远进入不了文件夹处理分支。
  2. 多文件处理缺失:上传文件夹时,request.files['file']只会获取到第一个文件,后续文件被直接忽略,这就是只处理第一个文件的原因。
  3. 服务器路径误解:后端试图用os.listdir(folder)访问服务器本地文件夹,但上传的文件是浏览器提交的文件对象,服务器根本没有这个文件夹路径。

解决方案

后端代码修正

修改Flask路由,直接处理多文件上传(兼容单文件和文件夹上传场景):

@app.route('/transcriber', methods=['GET', 'POST'])
def transcriber():
    if request.method == 'GET':
        return render_template('jobs_transcriber.html', queued_jobs=jm.queued_jobs, running_jobs=jm.running_jobs,
                               completed_jobs=jm.completed_jobs, max_running_jobs=jm.max_running_jobs,
                               allowed_files=app.config['ALLOWED_FILES_TRANSCRIBER'])
    if request.method == 'POST':
        if 'file' not in request.files:
            flash('Missing file part')
            return redirect(request.url)
        
        # 获取所有上传的文件(单文件/文件夹内多文件通用)
        uploaded_files = request.files.getlist('file')
        
        valid_files = []
        for file in uploaded_files:
            if file.filename == '':
                flash('Empty file detected, skipping')
                continue
            if not is_allowed_file(app.config['ALLOWED_FILES_TRANSCRIBER'], file.filename):
                flash(f'File {file.filename} is not an allowed file type')
                continue
            valid_files.append(file)
        
        if not valid_files:
            flash('No valid files to process')
            return redirect(request.url)
        
        # 传入文件列表到任务创建逻辑
        jm.create_job_transcriber(valid_files)
        return redirect(request.url)

关键修改点

  • 移除了无效的folder字段判断逻辑,因为前端不会传递该字段。
  • 使用request.files.getlist('file')替代request.files['file'],获取所有上传的文件。
  • 统一处理单文件和多文件场景,过滤无效文件后批量提交任务。
  • 确保jm.create_job_transcriber方法支持接收文件列表(如果原方法仅支持单个文件,需同步修改该方法的批量处理逻辑)。

前端代码优化(可选)

原前端逻辑基本正常,可补充兼容更多浏览器的字段设置:

document.getElementById('source_type').addEventListener('change', function() {
    var selected_value = this.value;
    var upload_label = document.getElementById('upload_label');
    var upload_input = document.getElementById('upload_input');

    if (selected_value === 'folder') {
        upload_label.innerText = 'Select a folder:';
        upload_input.setAttribute('webkitdirectory', '');
        upload_input.setAttribute('directory', ''); // 兼容非webkit内核浏览器
        upload_input.setAttribute('multiple', 'true');
    } else {
        upload_label.innerText = 'Upload a file:';
        upload_input.removeAttribute('webkitdirectory');
        upload_input.removeAttribute('directory');
        upload_input.removeAttribute('multiple');
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:54:51