【问题标题】:Flask mp4 file not being displayed in video tag using file pathFlask mp4文件未使用文件路径显示在视频标签中
【发布时间】:2020-02-06 12:29:12
【问题描述】:

我有一个烧瓶应用程序,它将 mp4 文件存储在本地目录中,并将路径保存在我的数据库中。我可以访问烧瓶提供的文件用户send_file 并下载,但是当我将路径传递给视频标签时,它没有被显示。见以下代码:

保存视频文件:works fine as expected

@app.route('/', methods=['GET', 'POST'])
def index():
      form = VideoPicForm()
      if form.validate_on_submit():
        if form.vid.name not in request.files:
            flash('No video part specified')
            return redirect(url_for('index'))
        file = request.files[form.vid.name]
        if file.filename == '':
            flash('No file selected for uploading')
            return redirect(url_for('index'))
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            filepath = os.path.join(app.root_path, app.config['UPLOAD_FOLDER'], filename)
            file.save(filepath)
            video= VideosFiles(description=form.description.data, vidpath=filepath)
            db.session.add(video)
            db.session.commit()
            flash('video uploaded successfully...')
            return redirect(url_for('index'))
return render_template('index.html', title='Home', form=form)

从模板访问:```文件未呈现``

@app.route('/display')
def display():
    file_data= VideosFiles.query.filter_by(id=1).first()
    video= file_data.vidpath
    return render_template('display.html', title='Videos', video=video)

在模板中:

<video width="320" height="240" controls>
    <source src="{{video}}" type="video/mp4" />
</video>

但是当我使用send_file 下载时,视频会立即下载:

@app.route('/download')
def download():
    file_data= VideosFiles.query.filter_by(id=1).first()
    video= file_data.vidpath
    return send_file(video, as_attachment=True)

我是否遗漏了导致视频未在模板中呈现的任何内容?

【问题讨论】:

    标签: python flask


    【解决方案1】:

    您的代码有一个小的变化。确保您的视频存储在烧瓶应用程序结构中的静态文件夹中。

    我和你有同样的问题,当我将视频存储在静态文件夹中时,它工作正常。

    <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>Title</title>
    </head>
    <body>
    <video width="400" controls>
    <source src="{{ url_for('static', filename='small.mp4') }}" type="video/mp4">
    </video>
    </body>
    </html>
    

    还请使用 url_for 进行 html 渲染。

    【讨论】:

    • 在这种情况下,您将如何将用户与静态文件夹中上传的视频文件相关联?这就是为什么我选择将带有外键属性的数据库中的文件路径保存到用户模型。
    • 在这种情况下,您可以为每个文件分配唯一的文件值,并将该文件名与用户的引用一起存储。并且还将您的文件存储在静态中。因此,当用户请求文件时,然后从数据库中获取文件的名称并在视频链接中提供该文件。
    猜你喜欢
    • 2013-10-15
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    相关资源
    最近更新 更多