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

本地Flask应用:从表单上传获取文件完整路径

本地Flask应用获取用户选中文件的完整本地路径

问题背景

本地运行的Flask应用作为Python库的GUI,需要获取用户选中文件的完整本地路径(无需上传大文件),但当前代码仅能拿到文件名,无法获取路径信息。

核心限制说明

浏览器出于安全策略,默认不会向网页暴露本地文件的完整路径,仅返回文件名。但因为你的Flask应用是本地运行(用户访问localhost),可以利用Chromium内核浏览器的特殊支持来获取真实路径。

解决方案代码

修改前端模板(templates/index.html)

通过JavaScript在用户选择文件时获取本地路径,再通过隐藏字段传递给后端:

<form method="post" id="fileForm">
  <label for="myfile">选择文件:</label>
  <input type="file" id="myfile" name="myfile">
  <!-- 隐藏字段用于传递文件路径 -->
  <input type="hidden" id="filePath" name="filePath">
  <input type="submit">
</form>

<script>
// 监听文件选择事件
document.getElementById('myfile').addEventListener('change', function(e) {
  const selectedFile = e.target.files[0];
  // Chromium内核浏览器(Chrome/Edge等)在本地上下文支持file.path属性
  if (selectedFile.path) {
    document.getElementById('filePath').value = selectedFile.path;
  } else {
    alert('当前浏览器无法获取完整文件路径,请使用Chrome或Edge浏览器');
  }
});
</script>

修改后端代码(flask_app.py)

直接从表单中读取传递过来的文件路径:

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/', methods=['POST', 'GET'])
def hello():
    if request.method == 'POST':
        # 获取隐藏字段中的文件路径
        file_full_path = request.form.get('filePath')
        print(f"完整文件路径: {file_full_path}")
    return render_template('index.html')

注意事项

  • 仅支持Chromium内核浏览器(Chrome、Edge等):这类浏览器在访问localhost时,会允许网页获取本地文件的完整路径。
  • 无需设置表单的enctype="multipart/form-data":因为我们没有上传文件,仅传递路径字符串,避免不必要的文件处理。
  • 非Chromium浏览器兼容方案:如果用户使用Firefox等浏览器,无法获取完整路径,可引导用户手动输入路径,或切换浏览器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:12:56