我正在尝试创建代码,以允许用户输入照片并将该照片保存到文件夹“ / home / HassanSherien / mysite / Shape_Image”。我已按照以下链接中给出的步骤进行操作,但仍然收到一条错误消息,内容为“未找到,未在服务上找到所请求的URL。如果您手动输入URL,请检查拼写,然后重试。”
蟒蛇:
import os
from flask import Flask, request, redirect, url_for
from werkzeug.utils import secure_filename
UPLOAD_FOLDER = '/home/HassanSherien/mysite/Shape_Image'
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
def upload_file():
if request.method == 'POST':
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['file']
if file.filename == '':
flash('No selected file')
return redirect(request.url)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
HTML:
<form action="myform.cgi">
<input type="file" name="fileupload" value="fileupload"
id="file`upload">
<label for="fileupload"> Select a file to upload</label>
<br>
<input type="image" src="/wp-content/uploads/sendform.png"
alt="Submit" width="100">
</form>
如果file和allowed_file(file.filename),我也得到了错误提示:“ undefined name'allowed_file'”
您尚未为upload_file
功能分配路线。这应该在函数定义上方的那一行上完成:
@app.route('/upload', methods=['POST'])
def upload_file():
# rest of your code
另外,您还需要使表单的操作与此URL相对应:
<form action="/upload" method='POST'>
在Flask模板中,您可以根据函数名称自动生成以下URL:
<form action="{{ url_for('upload_file') }}" method='POST'>
表单中唯一的输入字段也应该是:
<input type="file" name="file" id="file_upload" />
<input type="submit />
注意,我已经设置name="file"
了与您的Python代码接受的内容相对应的内容。请参阅我刚刚发布的答案,这是为什么。官方文档对此有些混乱,因为它们在多个地方重用了“文件”一词,我认为这会使人们,尤其是新来者感到困惑。
如果file和allowed_file(file.filename),我也得到了错误提示:“ undefined name'allowed_file'”
听起来您尚未按照文档定义该功能:
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
根据评论编辑:
现在我的网站将允许人们上传照片,并且它将自动提交(因为尽管没有提交按钮,但代码上传后代码就知道了)
抱歉:您需要第二个输入标签作为“提交”按钮:正好<input type='submit' />
在表单末尾。
用户选择了要上传的文件后,然后单击此按钮,POST请求随数据一起发送到服务器。
到url_for('upload_file'),在我的情况下是'/ home / HassanSherien / mysite / Shape_Image'。
当窗体实际呈现(上传任何活动之前)窗体的action
属性将返回值{{url_for('file_upload')}}
这将是/upload
(作为集@app.route
线)。这会使表单提交至:http://example.com/upload
。不要将此与输入的路径UPLOAD_FOLDER
(服务器端)混淆。
在处理上传的代码中,以下行将指定的路径连接UPLOAD_FOLDER
到的值filename
:
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
为了使其更易于阅读,它与以下内容相同:
full_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(full_path)
第二行是您调用对象的save
方法,并file
提供完整路径作为参数。这实际上将文件保存到磁盘。
如果发现这种情况没有发生,请检查服务器控制台,因为您可能需要设置目录权限等。
此函数还应该返回类似重定向到站点上其他地方的内容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句