如果刷新或选项卡已关闭,则 Dropzone 删除文件
Posted
技术标签:
【中文标题】如果刷新或选项卡已关闭,则 Dropzone 删除文件【英文标题】:Dropzone remove files if refreshed or tab is closed 【发布时间】:2018-01-05 12:23:39 【问题描述】:我正在尝试使用 DropzoneJs。
我有一个带有一些文本字段和文件附件放置区的表单。我这样做是为了在文件成功上传到服务器后(由 dropzone 自动处理后),我将添加隐藏的输入字段,文件名作为值以及表单中的所有其他文本字段数据(用于数据库) .但是,如果我在 dropzone 中删除了文件并已成功上传到服务器,并且由于某种原因无法提交表单(例如页面刷新或选项卡关闭),则无需保存文件名到数据库中。如何在页面刷新或标签关闭之前删除服务器中的文件?
【问题讨论】:
提交表单时为什么不上传文件呢? 我同意Magnus,但是如果你想保持自动上传,为什么不给数据库中的文件添加一个标志,如果表单提交则清除它,并定期删除所有标记的文件? @MagnusEriksson dropzone 的 URL 与表单不同 所以改成一样的:***.com/questions/19893962/… @MagnusEriksson 第一个表单包含文本字段,dropzone 包含文件上传。如果我使用相同的 url,那么将调用相同的函数来处理任一请求。 【参考方案1】:1) 做这些事情的一个好主意(至少我是怎么做的),是你立即保存所有图像(带有文件名),当用户关闭页面并返回它时同时,他们又都出现了。所以是这样的: 假设您有一个表 users 和一个表 images。当他将图像上传到服务器时,即使没有提交表单,它们也会保存在服务器和表格 images 中。当用户关闭页面并返回时,他将再次拥有所有上传的图像。
2)如果你不想要这种东西,可以在images表中添加一个名称为“draft”之类的列,这样当用户上传图片时,所有的图像都是草稿,当他提交表格时,它们都变成了未草稿。所以有了这个,当用户关闭窗口时,图像仍然是草稿的,没有人会看到它们。 有了这个,您可以运行一个“cronjob”,从服务器中删除所有草稿图像,或者您可以在用户下次登录时执行此操作。
【讨论】:
文件名保存在不同的表post_materials
中,其他字段保存在posts
中,所以我需要先处理其他字段以获取新保存帖子的ID并附加它作为post_materials
的外键
所以我无法先将文件保存在数据库中
您可以事先创建该帖子作为草稿。因此,当用户点击“创建帖子”时,您可以为其创建草稿,这样您就有了帖子 ID,然后当您提交表单并将所有内容保存在“帖子”中时,您可以取消草稿。
我不明白你为什么要过度复杂化这个?只需一个表单即可同时提交所有内容。不需要任何 cron 作业或“草稿”或任何东西。 (有一种过度设计的东西)。
顺便说一句,这里只是一个例子:假设您的表单中有 dropzone。如果你想一次上传 20 张图片,每张 2mb,这样比一次上传要快得多。这样,每一个都有自己的线程,可以独立进行,所以比一次上传 40mb 快得多!以上是关于如果刷新或选项卡已关闭,则 Dropzone 删除文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Kendo UI TabStrip 中获取对当前选定选项卡的引用?
如何在 Angular 中处理浏览器选项卡关闭事件?只关闭不刷新