我想创建一个表单,允许使用烧瓶表单发送带有描述的图片。我尝试使用此视频:https : //www.youtube.com/watch?v=Exf8RbgKmhM
但是我在启动 app.py 时遇到了麻烦:
? website git:(master) ? python3.6 app.py
Traceback (most recent call last):
File "app.py", line 10, in <module>
from flask.ext.uploads import UploadSet, configure_uploads, IMAGES
ModuleNotFoundError: No module named 'flask.ext'
Run Code Online (Sandbox Code Playgroud)
我不得不替换为
flask.ext.uploads,flask_uploads
但现在我得到:
Traceback (most recent call last):
File "app.py", line 10, in <module>
from flask_uploads import UploadSet, configure_uploads, IMAGES
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/flask_uploads.py", line 26, in <module>
from werkzeug import secure_filename, FileStorage
ImportError: cannot import name 'secure_filename'
Run Code Online (Sandbox Code Playgroud)
我的导入和配置如下所示:
from datetime import datetime
from flask_sqlalchemy …Run Code Online (Sandbox Code Playgroud) 我在将文件上传工作到cookiecutter-flask应用程序(v.10.1.1)时遇到问题.现在,它没有保存上传的文件.
Cookiecutter-Flask默认安装WTForms和Flask-WTForms.我已经尝试过添加Flask-Uploads,但我不相信模块在这一点上添加了任何东西,所以我已经卸载了它.这是Flask-WTF文件上传文档:http://flask-wtf.readthedocs.io/en/latest/form.html#module-flask_wtf.file
文档和我的应用程序之间的主要区别在于我似乎有更多文件的信息,符合cookiecutter的约定.
在app_name/spreadsheet/forms.py:
from flask_wtf import Form
from wtforms.validators import DataRequired
from flask_wtf.file import FileField, FileAllowed, FileRequired
class UploadForm(Form):
"""Upload form."""
csv = FileField('Your CSV', validators=[FileRequired(),FileAllowed(['csv', 'CSVs only!'])])
def __init__(self, *args, **kwargs):
"""Create instance."""
super(UploadForm, self).__init__(*args, **kwargs)
self.user = None
def validate(self):
"""Validate the form."""
initial_validation = super(UploadForm, self).validate()
if not initial_validation:
return False
Run Code Online (Sandbox Code Playgroud)
在app_name/spreadsheet/views.py:
from flask import Blueprint, render_template
from flask_login import login_required
from werkzeug.utils import secure_filename
from app_name.spreadsheet.forms …Run Code Online (Sandbox Code Playgroud) 我是前端开发的初学者,必须在 Flask 中为一个项目做一个小型 Web 应用程序。
我编写了一个 Flask 应用程序,它允许您使用 HTML 表单上传图像,然后在您点击上传时将图像显示回用户。我需要修改它,以便每次用户上传图像时都不会将图像保存到项目目录中的文件夹中。基本上,应用程序应该将上传的图像发送回响应正文。
到目前为止,这是我的代码:
上传测试.py
import os
from uuid import uuid4
from flask import Flask, request, render_template, send_from_directory
app = Flask(__name__)
# app = Flask(__name__, static_folder="images")
APP_ROOT = os.path.dirname(os.path.abspath(__file__))
@app.route("/")
def index():
return render_template("upload.html")
@app.route("/upload", methods=["POST"])
def upload():
target = os.path.join(APP_ROOT, 'images/')
print(target)
if not os.path.isdir(target):
os.mkdir(target)
else:
print("Couldn't create upload directory: {}".format(target))
print(request.files.getlist("file"))
for upload in request.files.getlist("file"):
print(upload)
print("{} is the file name".format(upload.filename))
filename = upload.filename
destination = "/".join([target, filename])
print ("Accept …Run Code Online (Sandbox Code Playgroud) Flask 推荐使用 Flask-Uploads 模块来处理上传。我想拒绝任何超过特定大小的文件。有几种解决方案:
从文档:
此外,您还可以使用 patch_request_class 来修补应用的 request_class 以具有最大上传大小。
patch_request_class(app, 32 * 1024 * 1024)
Run Code Online (Sandbox Code Playgroud)
MAX_CONTENT_LENGTH 是拒绝大于您想要的文件上传的正确方法,
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
# save to disk first, then check filesize
request.files['file'].save('/tmp/foo')
size = os.stat('/tmp/foo').st_size
Run Code Online (Sandbox Code Playgroud)
-或者-
# save to memory, then check filesize
blob = request.files['file'].read()
size = len(blob)
Run Code Online (Sandbox Code Playgroud)
我MAX_CONTENT_LENGTH在官方文档中没有看到提到,它甚至没有像 SO 帖子那样手动检查文件大小。这两种方法最终是否相同,还是存在(大/微妙?)差异?另外,是patch_request_class先将文件保存到磁盘以确定总上传大小,还是保存到内存中?
我正在尝试从 werkzeug.utils 导入 secure_filename 并且它发出错误。它在我的基本虚拟环境下运行良好。
代码:
# Flask packages
from flask import Flask, render_template, request, session, redirect, flash, send_file
from flask_bootstrap import Bootstrap
from flask_uploads import UploadSet,configure_uploads,IMAGES,DATA,ALL
# Systems
import os
import sys
import json
from werkzeug.utils import secure_filename
Run Code Online (Sandbox Code Playgroud)
错误:
(absa_annotation) C02QM3FSFVH3:ABSA-annotation-tool kwunkeilau$ python3 app.py
Traceback (most recent call last):
File "app.py", line 4, in <module>
from flask_uploads import UploadSet,configure_uploads,IMAGES,DATA,ALL
File "/Users/kwunkeilau/anaconda3/envs/absa_annotation/lib/python3.7/site-packages/flask_uploads.py", line 26, in <module>
from werkzeug import secure_filename, FileStorage
ImportError: cannot import name 'secure_filename' from 'werkzeug' (/Users/kwunkeilau/anaconda3/envs/absa_annotation/lib/python3.7/site-packages/werkzeug/__init__.py)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用flask-uploads扩展上传文件。问题是,每次似乎我找到解决方案时,我都会资助另一个问题,而且我觉得文档很神秘。
这是代码:
from flask.ext.uploads import UploadSet, IMAGES, configure_uploads
import os
from werkzeug import secure_filename
photos = UploadSet('photos', IMAGES)
configure_uploads(app, photos)
@app.route('/edit_book', methods = ['GET', 'POST'])
def edit_book():
form = BookForm()
if form.validate_on_submit():
b.summary = form.summary.data
if request.method == 'POST':
try:
secure_filename = photos.save(request.files['cover'])
except:
print 'not ok'
db.session.add(b)
db.session.commit()
return redirect('/admin')
return render_template('edit_book.html', title = 'Add a book', form = form )
Run Code Online (Sandbox Code Playgroud)
当前错误仅给出:
KeyError: 'images'.
Run Code Online (Sandbox Code Playgroud)
我什么都没有了!使用此扩展是否有任何问题,因为我在任何地方都找不到合适的代码来提供完整的解决方案(从上传开始到将文件保存在文件夹中)。
预先感谢您的帮助。
<!-- extend from admin layout -->
{% extends "admin.html" %} …Run Code Online (Sandbox Code Playgroud) 我正在尝试决定如何在我的烧瓶应用程序上实现图像上传功能.我目前正在使用Flask-Uploads来完成工作,它看起来效果很好.但是,我不知道它是否非常安全,这可能是一个巨大的问题,因为涉及文件上传.Flask-Uploads并没有提供有关其服务实施的详细信息,因此我没有通过查看文档获得任何见解.但是,我在Flask的官方文档中看到它们包含了一个使用Werkzeug的文件上传示例,它似乎有一些额外的方法用于文件安全性.我似乎无法在网上找到任何有关哪一个更安全的信息.有没有人在这里有更多的网络安全经验曾经检查过这些替代方案中的一个或两个,并在这个问题上得出明确的结论?
我在 Flask 应用程序中使用Flask Uploads作为上传表单。但是,每当我尝试保存文件时,都会收到此错误:
File "/Users/Documents/virtual_environment/bin/../lib/python2.7/os.py", line 157, in makedirs
mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/app'
Run Code Online (Sandbox Code Playgroud)
上传似乎没有保存文件所需的权限?这是我用于烧瓶上传的配置:
UPLOADS_DEFAULT_URL = os.environ.get("UPLOADS_URL", "http://localhost:5000/")
UPLOADS_DEFAULT_DEST = "/app/uploads/"
UPLOAD_EXTENSIONS = set(["csv", "xls", "xsls"])
Run Code Online (Sandbox Code Playgroud)
另外,这是我保存实际文件的方法:
@app.route('/upload', methods = ['GET', 'POST'])
@app.route('/upload/', methods = ['GET', 'POST'])
@roles_accepted('admin', 'team')
def r_upload():
form = FileUploadForm()
if form.validate_on_submit():
filename = uploadSet.save(form.uploadfile.data)
url = uploadSet.url(filename)
flash("%s uploaded <a href=\'%s\'>HERE</a>!" % (filename, url))
return render_template('/uploads.html',
dashboard_title = "%s Uploads" % g.name,
form = form)
Run Code Online (Sandbox Code Playgroud)
该错误是由保存行引起的。对于如何解决这个问题,有任何的建议吗?谢谢。
这是我想要实现的目标:
我希望能够通过包含多种不同类型字段(BooleandFields、StringFields 等)的表单来编辑数据库条目,其中有两个flask_wtf FileFields我希望在我预先填充(使用文件名)时本来已经上传文件,因此当我只想更改其他字段中的某些条目时,我不必重新上传相同内容的 x 份。
这是我的立场:
当我输入表单进行编辑时,所有其他字段(FileFields 除外)都已正确预填充。我可以使用 Flask-Uploads 和 UploadSet 的组合上传文件。通过一个flask_wtf.file FileField. 在我的数据库中,我将文件名和文件 url 保存为字符串。
我已经阅读了flask-wtf 文件上传以及WTForms 文档,我对模拟表单需要做的事情感到有点迷失,以便像我已经填充 FileField 一样
以下是我正在使用的代码片段:
from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_bootstrap import Bootstrap
from flask_uploads import UploadSet, configure_uploads
[...]
app = Flask(__name__)
[...]
csvfiles = UploadSet('csvfiles')
configure_uploads(app, (csvfiles,))
Run Code Online (Sandbox Code Playgroud)
这里有问题的 FileFields 是:“dive_posiview”和“dive_ctd”
from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed, …Run Code Online (Sandbox Code Playgroud) 因此,我一直在尝试将图像上传器添加到我的代码中,但是却遇到了问题。即使我认为自己的upload_folder配置正确,但仍会收到类似以下错误:IOError: [Errno 2] No such file or directory: '/static/uploads/compressor.jpg' 即使文件/目录存在。
这是代码:
UPLOAD_FOLDER = 'static/uploads'
Run Code Online (Sandbox Code Playgroud)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
Run Code Online (Sandbox Code Playgroud)
@app.route('/fileupload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
#check if the post request has the file part
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['file']
# if user does not select file, browser also
#submit an empty part without filename
if file.filename == '':
flash('No selected file')
return redirect(request.url) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Flask 下载 PDF 文件,但我不希望该文件作为附件下载。我只是希望它作为一个单独的网页出现在用户的浏览器中。我尝试过将as_attachment=False选项传递给该send_from_directory方法,但没有成功。
到目前为止,这是我的功能:
@app.route('/download_to_browser')
def download_to_browser(filename):
return send_from_directory(directory=some_directory,
filename=filename,
as_attachment=False)
Run Code Online (Sandbox Code Playgroud)
该函数的工作原理是文件正在下载到我的计算机,但我更愿意将其显示在浏览器中(并让用户根据需要下载文件)。
我在这里读到我需要更改content-disposition参数,但我不确定如何有效地完成此操作(也许使用自定义响应?)。有什么帮助吗?
注意:我目前没有使用 Flask-Uploads,但我可能会继续使用。
flask-uploads ×11
flask ×10
python ×10
file-upload ×5
werkzeug ×2
html ×1
pdf ×1
python-3.6 ×1
security ×1
wtforms ×1