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

如何将本地路径链接视为实际链接而非Flask路由?

解决Flask中本地文件路径被当作路由处理的问题

浏览器无法直接访问以/Users/...开头的本地文件路径——一方面Flask会将这类路径识别为自身路由去解析,另一方面浏览器的安全机制也禁止直接读取本地文件。以下是两种可行的解决办法:

方法1:将文件放入Flask静态目录(推荐)

Flask默认会识别项目根目录下的static文件夹作为静态资源存储位置,直接利用这个机制即可:

  1. 在项目根目录创建static文件夹,将视频文件移入(比如放在static/videos/子目录下)
  2. 修改后端代码,无需传递本地路径:
@app.route('/')
def home():
    return render_template('home.html')
  1. 修改HTML模板,用url_for生成静态资源的正确URL:
<body>
<video width="1920" height="1080" controls>
<source src="{{ url_for('static', filename='videos/your_video.mp4') }}" type='video/mp4'>
</video>
</body>

url_for会自动生成指向静态文件的合法URL,不会被Flask当作路由解析。

方法2:创建路由代理本地文件(适合无法移动文件的场景)

如果不想移动本地文件,可以让Flask创建一个专门的路由,负责读取本地视频文件并返回给浏览器:

  1. 修改后端代码,添加文件读取路由:
from flask import send_file, abort
import os

@app.route('/')
def home():
    return render_template('home.html')

@app.route('/serve-video')
def serve_video():
    video_path = '/Users/.../your_video.mp4'
    # 检查文件是否存在
    if not os.path.exists(video_path):
        abort(404)
    # 流式返回文件,让浏览器直接播放
    return send_file(video_path, mimetype='video/mp4', as_attachment=False)
  1. 修改HTML模板,指向这个代理路由:
<body>
<video width="1920" height="1080" controls>
<source src="{{ url_for('serve_video') }}" type='video/mp4'>
</video>
</body>

这个路由会作为中间层,读取本地文件内容并返回给浏览器,避免直接暴露本地路径。

注意:不要尝试使用file://协议访问本地文件——这种方式仅在本地直接打开HTML文件时有效,通过Flask服务器访问时会被浏览器安全策略拦截,无法正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:07:52