flask和pyqt结合,写一个上传文件的程序
时间: 2024-05-03 12:16:31 浏览: 19
好的,下面是一个简单的上传文件程序的代码示例,结合了 Flask 和 PyQt:
```python
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFileDialog, QLabel
from PyQt5.QtGui import QPixmap
from flask import Flask, request, jsonify, render_template, redirect, url_for
import os
app = Flask(__name__)
class FileUploader(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('File Uploader')
self.setGeometry(100, 100, 400, 300)
self.uploadBtn = QPushButton('Upload', self)
self.uploadBtn.move(150, 220)
self.uploadBtn.clicked.connect(self.uploadFile)
self.filenameLabel = QLabel(self)
self.filenameLabel.move(10, 50)
self.imageLabel = QLabel(self)
self.imageLabel.setGeometry(10, 80, 380, 120)
def uploadFile(self):
filename, _ = QFileDialog.getOpenFileName(self, 'Open file', os.getenv('HOME'))
if filename:
self.filenameLabel.setText(filename)
pixmap = QPixmap(filename)
self.imageLabel.setPixmap(pixmap)
# send file to Flask server
files = {'file': open(filename, 'rb')}
response = requests.post('http://localhost:5000/upload', files=files)
app.run()
if __name__ == '__main__':
app = QApplication([])
window = FileUploader()
window.show()
app.exec_()
```
这个程序创建了一个 PyQt 窗口,其中包括一个上传按钮。当用户点击上传按钮时,会打开一个文件对话框,用户可以选择要上传的文件。选择文件后,程序将文件名和文件内容显示到窗口中,并且将文件发送到 Flask 服务器。Flask 服务器会将文件保存在指定的目录中。
注意:在运行此程序之前,需要先启动 Flask 服务器,代码如下:
```python
from flask import Flask, request, jsonify, render_template, redirect, url_for
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload():
if 'file' not in request.files:
return jsonify({'error': 'No file uploaded'})
file = request.files['file']
file.save(os.path.join(os.getcwd(), 'uploads', file.filename))
return jsonify({'success': True})
if __name__ == '__main__':
app.run()
```
这个 Flask 服务器定义了一个 `/upload` 路由,它接受 POST 请求并保存上传的文件。在这个例子中,文件将被保存在 `uploads` 目录下。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)