gpt4 book ai didi

python - 在 flask 中制作拖放 uploader

转载 作者:行者123 更新时间:2023-11-28 21:27:30 25 4
gpt4 key购买 nike

我正在尝试制作接收请求并将文件存储在 flask 中的“静态”文件夹中的上传站点。当我尝试在 in. 上发送“POST”请求时,我总是收到错误的请求。我需要它的唯一原因是测试我的拖放 javascript 上传器。有人可以指出我正确的方向吗?

import os
from flask import Flask, request, redirect, url_for
from werkzeug import secure_filename

UPLOAD_FOLDER = 'static'
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER


def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS

@app.route('/', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
file = request.files['xhr2upload'] # [0]
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return redirect(url_for('uploaded_file',
filename=filename))
return '''
<!doctype html>
<title>Upload new File</title>
<h1>Upload new File</h1>
<form action="" method=post enctype=multipart/form-data>
<p><input type=file name=file>
<input type=submit value=Upload>
</form>
'''

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

最佳答案

这是早期 Flask 的一个常见问题 - 当您尝试访问 request.args request.form request.values request.files 时,如果键不存在,它们将抛出 KeyError - 就像 Python 中的普通字典一样(尝试 {}["test"] in任何 Python 解释器)。 Flask 在 request 字典中添加了一些糖——它的 KeyError 实际上是 HTTPException 的子类,如果没有被捕获,它会引发 400 Bad Request。 (见 this part of the quickstart documentation )

导致此问题的行是 request.files['xhr2upload'] 。您没有在页面上包含任何 JavaScript,并且您在页面上拥有的唯一 <input type="file"> 名称为"file",而不是“xhr2upload”。将 request.files['xhr2upload'] 更改为 request.files['file'] 或将 ajax 上传器加载到您的页面并让它使用 xhr2upload 名称发布您的文件。

如果您的表单可能有一个字段,并且您想检查是否在不引发 KeyError 的情况下定义了一个字段,那么您可以使用 .get 方法:

request.form["not_here"] # KeyError -> 400 Bad Request

request.form.get("might_be_here") # Value if provided, else None

关于python - 在 flask 中制作拖放 uploader ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10929941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com