1月第一講:WxPython跨平臺開發框架之前后端結合實現附件信息的上傳及管理

1、功能描述和界面

  • 前端(wxPython GUI)
    • 提供文件選擇、顯示文件列表的界面。
    • 支持上傳、刪除和下載附件。
    • 展示上傳狀態和附件信息(如文件名、大小、上傳時間)。
  • 后端(REST API 服務)
    • 提供上傳、刪除、獲取附件信息的接口。
    • 使用常見的 Web 框架(如 Flask 或 FastAPI)實現。

首先前端我們需要一個對所有附件進行管理的界面,以便對于附件進行統一的維護處理。

前端發起上傳附件的處理,如下界面所示,可以選擇多個不同類型的文件。

?上傳成功后,我們可以打開附件信息記錄,如果是圖片會顯示出來,如果是其他格式,可以通過打開鏈接方式下載查看。

2、功能的實現處理

如果附件是簡單的上傳,比較容易處理,我們可以先了解一下簡單的做法,然后在深入探討實際框架中對于附件的處理。

1) FastAPI 端實現文件上傳接口

首先,在 FastAPI 中創建一個接收文件的接口:

復制代碼

from fastapi import FastAPI, File, UploadFileapp = FastAPI()@app.post("/upload/")
async def upload_file(file: UploadFile = File(...)):with open(file.filename, "wb") as f:f.write(await file.read())return {"filename": file.filename}

復制代碼

在公布對應的API接口后,在 前端的 wxPython 項目中,您可以通過?requests?庫 或者?aiohttp 庫 與?FastAPI 交互來實現文件上傳。以下是簡單的實現步驟和示例代碼

復制代碼

import wx
import requestsclass FileUploadFrame(wx.Frame):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)panel = wx.Panel(self)self.upload_button = wx.Button(panel, label="上傳文件", pos=(20, 20))self.upload_button.Bind(wx.EVT_BUTTON, self.on_upload)self.status_text = wx.StaticText(panel, label="", pos=(20, 60))def on_upload(self, event):with wx.FileDialog(self, "選擇文件", wildcard="所有文件 (*.*)|*.*",style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as file_dialog:if file_dialog.ShowModal() == wx.ID_CANCEL:return  # 用戶取消選擇# 獲取文件路徑file_path = file_dialog.GetPath()try:self.upload_file(file_path)except Exception as e:wx.LogError(f"文件上傳失敗: {e}")def upload_file(self, file_path):url = "http://127.0.0.1:8000/upload/"  # FastAPI 服務器的上傳接口with open(file_path, "rb") as file:files = {"file": file}response = requests.post(url, files=files)if response.status_code == 200:self.status_text.SetLabel(f"上傳成功: {response.json().get('filename')}")else:self.status_text.SetLabel(f"上傳失敗: {response.status_code}")if __name__ == "__main__":app = wx.App(False)frame = FileUploadFrame(None, title="文件上傳", size=(300, 150))frame.Show()app.MainLoop()

復制代碼

2) 上傳多個文件的處理方式

上面是單個文件的上傳處理,如果要一次性提交多個文件到 FastAPI 接口,可以使用 FastAPI 的?List[UploadFile]?類型接收多個文件。以下是完整的實現方法。

復制代碼

from fastapi import FastAPI, File, UploadFile
from typing import Listapp = FastAPI()@app.post("/upload/")
async def upload_files(files: List[UploadFile] = File(...)):saved_files = []for file in files:file_path = f"./uploaded/{file.filename}"  # 保存到 uploaded 目錄with open(file_path, "wb") as f:f.write(await file.read())saved_files.append(file.filename)return {"uploaded_files": saved_files}

https://book.qq.com/book-search/%E5%90%8D%E4%BC%98%E9%A6%86%E7%BD%91%E3%80%9023Y4.com%E3%80%91?c31a
https://book.qq.com/book-search/%E6%B5%B7%E8%A7%92%E7%A4%BE%E5%8C%BA%E3%80%9023Y4.com%E3%80%91?c31b
https://book.qq.com/book-search/%E8%89%B3%E6%AF%8D%E7%BD%91%E8%BF%9B%E3%80%9023Y4.com%E3%80%91?c31c
https://book.qq.com/book-search/%E6%9E%9C%E5%86%BB%E4%BC%A0%E5%AA%92%E3%80%9023Y4.com%E3%80%91?c31d
https://book.qq.com/book-search/%E6%9E%9C%E5%86%BB%E4%BC%A0%E5%AA%92%E8%BF%9B23Y4.com%E7%9C%8B?c31e
https://book.qq.com/book-search/%E6%80%A7%E5%B7%B4%E5%85%8B%E8%BF%9B%E3%80%9023Y4.com%E3%80%91?c31f
https://book.qq.com/book-search/%E7%88%B1%E5%A8%81%E5%A5%B6%E7%BD%91%E3%80%9023Y4.com%E3%80%91?c31g
https://book.qq.com/book-search/%E7%A6%81%E6%BC%AB%E5%A4%A9%E5%A0%82%E3%80%9023Y4.com%E3%80%91?c31h
https://book.qq.com/book-search/%E6%92%B8%E6%92%B8%E7%A4%BE%E7%BD%91%E3%80%9023Y4.com%E3%80%91?c31i
https://book.qq.com/book-search/%E6%8A%96%E9%98%B4%E4%B8%8B%E8%BD%BD%E3%80%8A23Y4.com%E3%80%8B?c31i
https://book.qq.com/book-search/%E6%8A%96%E9%98%B4%E7%BD%91%E7%AB%99%E3%80%9023Y4.com%E3%80%91?c31k
https://book.qq.com/book-search/%E4%B9%85%E4%B9%85%E7%83%AD%E7%9C%8B%E3%80%9023Y4.com%E3%80%91?c31l
https://book.qq.com/book-search/%E4%B9%85%E4%B9%85%E7%83%AD%E8%BF%9B%E3%80%9023Y4.com%E3%80%91?c31m
https://book.qq.com/book-search/%E6%92%B8%E6%92%B8%E7%A4%BE%E8%BF%9B%E3%80%9023Y4.com%E3%80%91?c31n
https://book.qq.com/book-search/%E4%B8%8B%E8%BD%BD%E6%8A%96%E9%98%B4%E3%80%9023Y4.com%E3%80%91?c31o

https://book.qq.com/book-search/%E8%89%B3%E6%AF%8D%E5%9C%B0%E5%9D%80%E3%80%9023Y4.com%E3%80%91?c31p
https://book.qq.com/book-search/%E7%9C%8B%E8%89%B3%E6%AF%8D%E8%BF%9B%E3%80%9023Y4.com%E3%80%91?c31q
https://book.qq.com/book-search/%E8%89%B3%E6%AF%8D%E7%9C%8B%E8%BF%99%E3%80%9023Y4.com%E3%80%91?c31r
https://book.qq.com/book-search/%E8%89%B3%E6%AF%8D%E5%9C%B0%E5%9D%80%E8%BF%9B23Y4.com%E7%9C%8B?c31s
https://book.qq.com/book-search/%E8%89%B3%E6%AF%8D%E5%9C%B0%E5%9D%80%E6%9D%A523Y4.com%E7%9C%8B?c31t

復制代碼

而在前端WxPython的處理中,需要對多個文件進行上傳處理即可,可以使用?wx.FileDialog?的多選功能,并通過?requests?庫批量上傳多個文件。

復制代碼

import wx
import requestsclass MultiFileUploadFrame(wx.Frame):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)panel = wx.Panel(self)self.upload_button = wx.Button(panel, label="上傳多個文件", pos=(20, 20))self.upload_button.Bind(wx.EVT_BUTTON, self.on_upload)self.status_text = wx.StaticText(panel, label="", pos=(20, 60), size=(300, -1))def on_upload(self, event):with wx.FileDialog(self, "選擇文件", wildcard="所有文件 (*.*)|*.*",style=wx.FD_OPEN | wx.FD_MULTIPLE) as file_dialog:if file_dialog.ShowModal() == wx.ID_CANCEL:return  # 用戶取消選擇# 獲取選擇的多個文件路徑file_paths = file_dialog.GetPaths()try:self.upload_files(file_paths)except Exception as e:wx.LogError(f"文件上傳失敗: {e}")def upload_files(self, file_paths):url = "http://127.0.0.1:8000/upload/"  # FastAPI 服務器的上傳接口files = [("files", (file_path.split("/")[-1], open(file_path, "rb"))) for file_path in file_paths]response = requests.post(url, files=files)if response.status_code == 200:uploaded_files = response.json().get("uploaded_files", [])self.status_text.SetLabel(f"上傳成功: {', '.join(uploaded_files)}")else:self.status_text.SetLabel(f"上傳失敗: {response.status_code}")if __name__ == "__main__":app = wx.App(False)frame = MultiFileUploadFrame(None, title="多文件上傳", size=(400, 200))frame.Show()app.MainLoop()

復制代碼

不過我們附件的上傳,往往還需要伴隨著一些額外的信息,方便把這些信息存儲在數據庫中供查詢參考,同時也是關聯業務模塊和附件信息的重要依據。

如果需要在上傳多個文件的同時傳遞額外參數(如?guid?和?folder),可以將這些參數通過 POST 請求的表單數據 (data) 傳遞。FastAPI 可以同時處理文件和表單數據。?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64621.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64621.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64621.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

面試經典150題——滑動窗口

文章目錄 1、長度最小的子數組1.1 題目鏈接1.2 題目描述1.3 解題代碼1.4 解題思路 2、無重復字符的最長子串2.1 題目鏈接2.2 題目描述2.3 解題代碼2.4 解題思路 3、串聯所有單詞的子串3.1 題目鏈接3.2 題目描述3.3 解題代碼3.4 解題思路 4、最小覆蓋子串4.1 題目鏈接4.2 題目描…

12.29~12.31[net][review]need to recite[part 2]

網絡層 IP 首部的前一部分是固定長度,共 20 字節,是所有 IP 數據報必須具有的 路由器 路由選擇協議屬于網絡層控制層面的內容 l 路由器 的 主要工作: 轉發分組。 l 路由 信息協議 RIP (Routing Information Protocol ) 是 一種 分布式的…

免費下載 | 2024網絡安全產業發展核心洞察與趨勢預測

《2024網絡安全產業發展核心洞察與趨勢預測》報告的核心內容概要: 網絡安全產業概況: 2023年中國網絡安全產業市場規模約992億元,同比增長7%。 預計2024年市場規模將增長至1091億元,2025年達到1244億元。 網絡安全企業數量超過4…

Django項目部署到服務器

文章目錄 django項目部署到服務器在服務器上安裝Django和依賴:項目代碼上傳配置數據庫收集靜態文件配置Web服務器配置Gunicorn(WSGI服務器)啟動/停止/重載systemd服務。 django項目部署到服務器 在服務器上安裝Django和依賴: su…

記憶旅游系統|Java|SSM|VUE| 前后端分離

【技術棧】 1??:架構: B/S、MVC 2??:系統環境:Windowsh/Mac 3??:開發環境:IDEA、JDK1.8、Maven、Mysql5.7 4??:技術棧:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5??數據庫可…

微信小程序:定義頁面標題,動態設置頁面標題,json

1、常規設置頁面標題 正常微信小程序中,設置頁面標題再json頁面中進行設置,例如 {"usingComponents": {},"navigationBarTitleText": "標題","navigationBarBackgroundColor": "#78b7f7","navi…

基于通用優化軟件GAMS的數學建模和優化分析;GAMS安裝和介紹、GAMS程序編寫、GAMS程序調試、實際應用算例演示與經驗分享

GAMS(General Algebraic Modeling System)是一款高級建模系統,主要用于解決線性規劃、非線性規劃、動態規劃、混合整數規劃等優化問題。它以其簡單清晰的用戶接口和強健穩定的數值分析能力而著稱,適用于大型、復雜的優化問題。GAM…

理解生成協同促進?華為諾亞提出ILLUME,15M數據實現多模態理解生成一體化

多模態理解與生成一體化模型,致力于將視覺理解與生成能力融入同一框架,不僅推動了任務協同與泛化能力的突破,更重要的是,它代表著對類人智能(AGI)的一種深層探索。通過在單一模型中統一理解與生成&#xff…

學習vue3的筆記

一、vue和react的對比 1、基礎介紹 vue:https://cn.vuejs.org/ vue3是2020年創建的 react:https://react.dev/ react是一個2013年開源的JavaScript庫,嚴格意義上來說不是一個框架 2、diff算法 兩個框架采用的都是同級對比策略 兩節點對…

SQLiteDataBase數據庫

XML界面設計 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_paren…

k8s部署nginx+sshd實現文件上傳下載

要通過 nginx 和 sshd 實現文件的上傳和下載&#xff0c;通常的做法是結合 SSH 協議和 HTTP 協議&#xff0c;使用 nginx 提供 Web 服務器功能&#xff0c;同時使用 sshd&#xff08;即 SSH 服務&#xff09;來處理通過 SSH 協議進行的文件傳輸。 SSH 實現文件的上傳和下載&…

Golang 中 Goroutine 的調度

Golang 中 Goroutine 的調度 Golang 中的 Goroutine 是一種輕量級的線程&#xff0c;由 Go 運行時&#xff08;runtime&#xff09;自動管理。Goroutine 的調度基于 M:N 模型&#xff0c;即多個 Goroutine 可以映射到多個操作系統線程上執行。以下是詳細的調度過程和策略&…

clickhouse-backup配置及使用(Linux)

一、下載地址 Releases Altinity/clickhouse-backup GitHub 二、上傳到服務器解壓安裝 自行上傳至服務器&#xff0c;解壓命令&#xff1a; tar xvf clickhouse-backup-linux-amd64.tar.gz 三、創建軟連接 sudo ln -sv build/linux/amd64/clickhouse-backup /usr/local/bin/…

如何在群暉NAS上安裝并配置MySQL與phpMyAdmin遠程管理數據庫

文章目錄 前言1. 安裝MySQL2. 安裝phpMyAdmin3. 修改User表4. 本地測試連接MySQL5. 安裝cpolar內網穿透6. 配置MySQL公網訪問地址7. 配置MySQL固定公網地址8. 配置phpMyAdmin公網地址9. 配置phpmyadmin固定公網地址 前言 大家是不是經常遇到需要隨時隨地訪問自己數據的情況&am…

《向量數據庫指南》——Milvus Cloud 2.5:Sparse-BM25引領全文檢索新時代

Milvus Cloud BM25:重塑全文檢索的未來 在最新的Milvus Cloud 2.5版本中,我們自豪地引入了“全新”的全文檢索能力,這一創新不僅鞏固了Milvus Cloud在向量數據庫領域的領先地位,更為用戶提供了前所未有的靈活性和效率。作為大禹智庫的向量數據庫高級研究員,以及《向量數據…

SQL 總結

SQL 總結 引言 SQL(Structured Query Language,結構化查詢語言)是一種用于管理關系數據庫管理系統(RDBMS)的標準編程語言。自1974年首次提出以來,SQL已成為數據庫領域中不可或缺的一部分。它允許用戶執行各種操作,如查詢、更新、插入和刪除數據庫中的數據。本文旨在提…

ESP32-CAM開發板入門 (下載示例程序)

ESP32-CAM開發板例程使用 1、準備工作1.1、硬件準備1.2、軟件準備 2、選擇示例程序并錄入第一步 1、準備工作 1.1、硬件準備 1.2、軟件準備 Arduino IDE &#xff1a; 編程與寫入&#xff08;下載地址 https://www.arduino.cc/en/software&#xff09; 安裝好后將軟件設置到…

企業賦能是什么意思-國際數字影像產業園解讀

在當今競爭激烈的商業環境中&#xff0c;企業賦能已成為推動企業發展、提升競爭力的關鍵策略。國際數字影像產業園作為數字影像產業的重要集聚地&#xff0c;通過一系列創新舉措為入駐園區的我眾多企業賦能。那么&#xff0c;企業賦能究竟是什么意思呢&#xff1f; 企業賦能是…

混合并行訓練框架性能對比

混合并行訓練框架性能對比 1. 框架類型 DeepSpeed、Megatron - LM、Colossal - AI、SageMaker、Merak、FasterMoE、Tutel、Whale、Alpa、DAPPLE、Mesh - TensorFlow 2. 可用并行性(Available parallelisms) DNN framework(深度神經網絡框架)DP(數據并行,Data Parallelis…

客戶案例:基于慧集通集成平臺,打通屠宰管理系統與用友U8C 系統的全攻略

一、引言 本原型客戶成立于2014年&#xff0c;是一家集飼草種植、肉牛養殖、精深加工、冷鏈物流、餐飲服務于一體的大型農牧綜合體。公司下設三個子公司分別涵蓋農業、畜牧業、肉制品加工業與餐飲物流服務業。公司嚴格按照一二三產業融合發展要求&#xff0c;以肉牛產業化為支…