首页 > 编程问答 >Python + Svelte,如何使用本地文件系统

Python + Svelte,如何使用本地文件系统

时间:2024-08-08 03:54:28浏览次数:13  
标签:python user-interface svelte

总结一下,我有一个用 python 编写的应用程序。
它在输入时需要一堆视频文件。
使用一些魔法并生成合并的视频文件输出。

我没有找到一个好的 GUI解决方案(tkinter,QT,TUI等),所以我选择Svelte框架。
但是出现了一个问题,我如何使用本地文件系统。

在GUI(svelte)上,我必须上传文件才能发送它们在我的 python 脚本中。
别想,这是一个不错的选择。

我没有尝试,因为如果这是一条死胡同,我不想掉进兔子洞。


你说的对,直接在浏览器中使用 JavaScript 处理大量视频文件(比如在 Svelte 中)并与本地文件系统交互,由于安全限制,这并不是一个好的选择。

更好的方法是让你的 Python 后端处理文件系统交互和视频处理。Svelte 前端可以作为用户界面,用于选择文件并触发处理。

以下是如何使用 Python 和 Svelte 来实现这个目标:

1. Python 后端 (例如,使用 Flask):

from flask import Flask, render_template, request, send_from_directory
import os
from werkzeug.utils import secure_filename

app = Flask(__name__)
UPLOAD_FOLDER = 'uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
os.makedirs(UPLOAD_FOLDER, exist_ok=True)

# ... 你用于视频处理的 Python 代码 ...

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        uploaded_files = request.files.getlist('file')
        filenames = []
        for file in uploaded_files:
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            filenames.append(filename)
        # 调用你的视频处理逻辑,传入文件名列表
        # ...
        output_filename = process_videos(filenames)  
        return send_from_directory(app.config['UPLOAD_FOLDER'], output_filename, as_attachment=True)
    return render_template('index.html')

if __name__ == '__main__':
    app.run(debug=True)

2. Svelte 前端:

<script>
  async function handleSubmit(event) {
    event.preventDefault();
    const files = event.target.files;
    const formData = new FormData();

    for (let i = 0; i < files.length; i++) {
      formData.append('file', files[i]);
    }

    const response = await fetch('/', {
      method: 'POST',
      body: formData,
    });

    if (response.ok) {
      // 处理成功的视频合并,例如,提供下载链接
      const blob = await response.blob();
      const url = window.URL.createObjectURL(blob);
      const a = document.createElement('a');
      a.href = url;
      a.download = 'merged_video.mp4'; // 根据你的逻辑设置文件名
      document.body.appendChild(a); 
      a.click();
      a.remove();
    } else {
      // 处理错误
      console.error('上传失败');
    }
  }
</script>

<form on:submit={handleSubmit}>
  <input type="file" name="file" multiple />
  <button type="submit">合并视频</button>
</form>

解释:

  • Python (Flask):
    • 设置一个上传文件夹来存储上传的视频。
    • 创建一个路由来处理文件上传。
    • 使用 secure_filename 来安全地处理文件名。
    • 在上传文件后,调用你的视频处理逻辑。
    • 使用 send_from_directory 将处理后的视频文件发送回给客户端。
  • Svelte:
    • 创建一个简单的表单来选择多个文件。
    • 在提交表单时,使用 FormData 对象发送文件到 Python 后端。
    • 处理来自 Python 后端的响应,如果成功,提供下载合并后的视频的链接。

你需要安装的 Python 库:

  • Flask
  • werkzeug

使用这种方法,Svelte 前端处理用户界面和文件选择,而 Python 后端处理所有繁重的文件操作和视频处理。这提供了更好的安全性和性能。

标签:python,user-interface,svelte
From: 78845431

相关文章

  • 如何在Python中绘制伪球面
    目标是使用meshgrid和numpy库生成伪球体的三维图形,但我使用下面的代码生成的图形不完整u=np.linspace(0,np.pi,50)v=np.linspace(0,2*np.pi,100)x,y=np.meshgrid(u,v)X=np.arccos(x)*np.cos(y)Y=np.arccos(x)*np.sin(y)Z=x-np.tan(x)fig=plt.f......
  • 18:Python集合属性
    #Python3集合#集合(set)是一个无序的不重复元素序列。#集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。#集合中元素必须是不可变类型,也就说里面不能是列表和字典#可以使用大括号{}创建集合,元素之间用逗号,分隔,或者也可以使用set()函数创建集合。s......
  • Python爬虫案例与实战:爬取源代码练习评测结果
    Python爬虫案例与实战:爬取源代码练习评测结果本章案例将介绍用Python编写程序实现简单网站的模拟登录,然后保持登录后的网页会话,并在会话中模拟网页表单提交,之后使用Requests库的高级特性爬取提交之后的返回结果。在HTTP网页中,如登录、提交和上传等操作一般通过向网页发送......
  • Python爬虫案例与实战:爬取豆瓣电影简介
    Python爬虫案例与实战:爬取豆瓣电影简介本章案例将介绍如何爬取豆瓣电影简介,以此帮助读者学习如何通过编写爬虫程序来批量地从互联网中获取信息。本案例中将借助两个第三方库----Requests库和BeautifulSoup库。通过Requests库获取相关的网页信息,通过BeautifulSoup库解析大......
  • 趣味Python游戏编程:第3章 递归函数的威力:扫雷
    趣味Python游戏编程:第3章递归函数的威力:扫雷在第2章中,我们制作了一个拼图游戏,玩家通过鼠标操作图片块移动。本章设计一款扫雷游戏,玩法是在一个方块阵列中随机埋设一定数量的地雷,然后由玩家逐个打开方块,并以排除所有地雷为最终游戏目标。如果玩家打开的方块中有地雷,则游戏......
  • Python 依赖管理神器 Poetry 深入指南
    Poetry依赖管理详细教程引言在现代软件开发中,依赖管理是项目成功的关键。Python开发者现在有了一个新的选择:Poetry。Poetry是一个现代的Python包管理工具,旨在简化Python项目的创建、打包和发布。它提供了一种更直观和高效的方式来管理项目的依赖关系,相较于传统的p......
  • python的函数、魔法方法和案例
    1.python函数中self的用法在Python中,self 是一个对当前实例(对象)的引用,用于访问属于该类的变量和方法。在定义类的方法时,通常需要将 self 作为第一个参数。这允许在类的实例上调用方法时,自动将实例本身作为参数传递给方法。classPerson:def__init__(self,name......
  • 【视频讲解】Python灰色关联度分析直播带货效用、神经退行性疾病数据
    原文链接:https://tecdat.cn/?p=37273原文出处:拓端数据部落公众号 分析师:JiayiDeng 本文展示如何用灰色关联度分析的直播带货效用及作用机制研究,并结合一个分析神经退行性疾病数据实例的代码数据,为读者提供一套完整的实践数据分析流程。一、研究难点直播带货作为新兴产业,缺......
  • 线性方程组迭代算法的Python实现
    更多精彩,关注博客园主页,不断学习!不断进步!我的主页csdn很少看私信,有事请b站私信博客园主页-发文字笔记-常用有限元鹰的主页内容:ABAQUS数值模拟相关Python科学计算开源框架,编程学习笔记哔哩哔哩主页-发视频-常用FE-有限元鹰的个人空间内容:模拟案例网格划分游戏视频,......
  • 最小二乘法原理推导+代码实现[Python]
    0.前言本文主要介绍了最小二乘法公式推导,并且使用Python语言实现线性拟合。读者需要具备高等数学、线性代数、Python编程知识。请读者按照文章顺序阅读。绘图软件为:geogebra5。1.原理推导1.1应用最小二乘法在购房中的应用通常涉及房价预测和房屋定价方面。这种统计方法通......