【问题标题】:Ajax File Upload storing bytes until save java.Ajax 文件上传存储字节直到保存 java。
【发布时间】:2013-04-13 04:59:42
【问题描述】:

我是一名使用 Tapestry5 的 Java 开发人员。我正在使用 jQuery 插件通过 ajax 管理我的文件上传。

我正在寻找在实际页面保存之前临时保存附件的最佳方法。我当前的工作流程包括用户使用 ajax 上传框或位于文件旁边的 ajax 删除链接(如 gmail 附件)上传/删除文件。在文件上传并单击表单中的保存操作之前,我不想将文件提交到数据库。

我目前正在上传文件并将它们保存到用户会话,直到单击表单中的保存操作。如果只使用一个选项卡,这可以很好地工作,但是我不确定这是最好的方法。

有人有什么补充建议吗?

【问题讨论】:

    标签: java jquery file-upload


    【解决方案1】:

    我不得不做一些类似的事情,但是堆栈略有不同(ASP.NET MVC)。

    我解决问题的方法是在页面加载时生成一个 GUID 并将其填充到隐藏的输入中。您的数据存储可以是您想要的任何内容(会话、数据库、磁盘等 - 只需确保将 GUID 作为密钥的一部分)。当用户保存表单时,请确保包含您隐藏的输入数据,然后您将有一种独特的方式来识别属于该实例的文件。

    【讨论】:

    • 谢谢,我想我最终需要将 GUID 与附件一起存储以防止交叉表问题,但我只是不确定将附件存储在用户会话中是否是最好的主意考虑到可能对多个用户的系统内存产生的潜在大小和影响。
    • @George - 这是一个完全公平的问题,但我无法回答。这取决于文件的可能大小以及在给定时间您必须在内存中保存的估计文件数。我个人使用磁盘作为临时存储,因为我不想填满内存。
    【解决方案2】:

    到目前为止,您所做的似乎是正确的,如果用户尝试在多个选项卡中使用您的网络应用程序,您可能会遇到麻烦。你可以做的是:

    1. 在使用 ajax 调用上传任何文件之前获取唯一密钥。 (注意:正如用户@Ek0nomik 所建议的,这也可以在生成页面时包含在隐藏的输入属性中)
    2. 上传文件时,请务必同时提交此密钥。
    3. 保存表单后,提交密钥,然后您就知道应该在数据库中提交哪些文件。

    【讨论】:

    • 在准备好提交数据库之前,最好将附件存储在内存中还是写入磁盘?
    • 我会将它们存储在磁盘上,并定期运行批处理以删除剩余文件。
    猜你喜欢
    • 1970-01-01
    • 2022-11-15
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    相关资源
    最近更新 更多