flask怎么拖拽图片到网页并获取路径
时间: 2024-02-27 11:51:30 浏览: 75
你可以使用 HTML5 中的拖放 API,在网页中实现拖拽图片并获取路径,再通过 Flask 的 request 对象获取路径。具体实现方法如下:
```python
from flask import Flask, request, render_template
import os
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
file_path = os.path.join(app.root_path, 'uploads', file.filename)
file.save(file_path)
return 'File uploaded successfully!'
if __name__ == '__main__':
app.run()
```
HTML 文件中的代码如下:
```html
<!DOCTYPE html>
<html>
<head>
<title>Upload Image</title>
</head>
<body>
<div id="drop_zone">Drop image here</div>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file">
<button type="submit">Upload</button>
</form>
<script>
function handleFileSelect(evt) {
evt.stopPropagation();
evt.preventDefault();
var files = evt.dataTransfer.files; // 获取拖拽的文件列表
var formData = new FormData(); // 创建 FormData 对象
formData.append('file', files[0]); // 添加文件到 FormData 对象
var xhr = new XMLHttpRequest(); // 创建 XMLHttpRequest 对象
xhr.open('POST', '/upload'); // 设置请求路径
xhr.send(formData); // 发送请求
}
function handleDragOver(evt) {
evt.stopPropagation();
evt.preventDefault();
evt.dataTransfer.dropEffect = 'copy';
}
var dropZone = document.getElementById('drop_zone');
dropZone.addEventListener('dragover', handleDragOver, false);
dropZone.addEventListener('drop', handleFileSelect, false);
</script>
</body>
</html>
```
在这个例子中,我们使用 HTML5 中的拖放 API,创建一个可以拖拽图片的区域,并在拖拽结束后通过 XMLHttpRequest 对象将图片上传到服务器。最后,我们使用 Flask 的 request 对象获取图片路径,使用 os 模块的 join() 方法获取图片的完整路径,然后将图片保存在指定路径中。
需要注意的是,Flask 在处理文件上传时需要配置 app.config['UPLOAD_FOLDER'],以指定文件的上传路径。在上面的例子中,我们使用 app.root_path 和 'uploads' 组成文件上传的路径。
此外,需要注意的是,我们在 form 标签中设置了 enctype='multipart/form-data',以确保表单能够正确处理文件上传。
阅读全文