一页中有多个flask_dropzone

时间:2018-11-14 16:45:57

标签: python-3.x flask file-upload dropzone.js flask-uploads

我是新开发者。

我有多个步骤的表单,我希望允许用户上传最多2个表单(例如DROPZONE_MAX_FILE_SIZE = 3,PLOADED_PATH = os.path.join(base,'doc Form'))

然后在表格的其他部分(步骤),我要允许用户上传具有不同配置的更多文件(例如DROPZONE_MAX_FILE_SIZE = 20,PLOADED_PATH = os.path.join(base,'med'))

我尝试过的事情:

1-尝试在两个不同的Div中以相同的形式两次插入dropzone,并为每个表单提供了自定义选项,包括不同的URL路由,但是没有用(仅当我删除其中一个时才起作用)我总是会收到错误{{1 }}

2-阅读此答案Multiple Dropzone in a single page后,我已将div替换为form并添加了自定义选项,其中每个dropzone在flask中都有其自己的功能

如果我从应用程序配置中删除了SECOND_PATH_URL_OR_FUNCTION is not defined并添加为自定义选项,我会在chrome的控制台DROPZONE_UPLOAD_ACTION='handle_upload'上收到此错误

当我添加一个URL时,它是唯一有机会工作的URL,因为第二个错误No URL provided.出现错误,其中handle_upload2只是与我添加的原始函数handle_upload的重复它是config选项中的网址。

custom_options似乎并没有覆盖app.config详细信息

我已经接近了,但是我不知道如何在同一页面中添加两个URL,因此我可以运行一个功能脚本handle_upload2 is not defined并以Ajax格式发送所有数据,就像它们是一种形式一样。

烧瓶文件当前的应用配置选项:

onclick

拖放区1的自定义选项:

UPLOADED_PATH=os.path.join(basedir, 'uploads'),
# Flask-Dropzone config:
DROPZONE_ALLOWED_FILE_TYPE='image',
DROPZONE_MAX_FILE_SIZE=3,
DROPZONE_MAX_FILES=30,
DROPZONE_IN_FORM=True,
DROPZONE_UPLOAD_ON_CLICK=True,
DROPZONE_UPLOAD_ACTION='handle_upload',  # URL or endpoint
DROPZONE_UPLOAD_BTN_ID='uploadID',

,然后放下区域2:

    {{ dropzone.config(custom_init='dz = this;document.getElementById("uploadID").addEventListener("click", function handler(e) {dz.processQueue();});',
                 custom_options='autoProcessQueue: false, addRemoveLinks: true, maxFiles: 2,DROPZONE_UPLOAD_ACTION:handle_upload,') }}

1 个答案:

答案 0 :(得分:0)

烧瓶放置区文档说: 您可能希望对不同页面上的多个放置区域使用不同的配置,在这种情况下,您可以将特定的关键字参数直接传递到dropzone.config()中。

关键字参数应以这种方式映射相应的点火变量:

DROPZONE_DEFAULT_MESSAGE –> default_message DROPZONE_TIMEOUT –>超时 DROPZONE_ALLOWED_FILE_TYPE –> allowed_file_type 等等 例如:

{{ dropzone.config(max_files=10, timeout=10000, default_message='Drop here!') }}

您传递的关键字参数将覆盖相应的配置。


因此,我认为您无法在同一页面中为许多放置区域进行不同的配置。

但是您可以在同一页面中为不同的拖放区发送两个URL:

{{ dropzone.create(action= url_for('product.first_upload')) }}
{{ dropzone.create(action= url_for('product.second_upload')) }}

@product.route('/first_upload', methods=['POST'])
def first_upload():
    #do something

@product.route('/second_upload', methods=['POST'])
def second_upload():
    #do something

此外,您还可以将参数的发送到上载函数,以在拖放区之间有所不同:

@product.route('/upload_images/<string:upload_for><int:id>', methods=['POST'])
def upload_images(upload_for, id):
    if upload_for == "Something like Cat Image":
        #do something with id passed