2011-01-20 71 views
1

我正在研究一个允许您写入笔记的Web应用程序。我想添加一些功能以允许用户将附件添加到笔记,但是我有一些小问题来弄清它背后的逻辑。如何将文件关联到尚未保存的记录

我希望它的工作有点像webmail或phpBB论坛帖子。你开始一个新的消息。有一个文件上传输入元素,旁边有一个“添加”按钮。当你添加一个文件时,它会被上传,你可以继续编写你的消息。当你最终点击“提交”时,它会创建注释并将上传的文件与它关联起来。这里有一些ASCII艺术:

Subject:  ______________ 

Message:  ______________ 
      ______________ 
      ______________ 

Attachments: some_file.txt 
      resume.odt 
      ______________ [Browse][Add] 

      [Save] 

但是,当它仍然被写入时,我怎样才能将上传与笔记关联?它还没有保存。它没有ID。通常情况下,我会添加一个数据库表,将上传的文件与笔记ID相关联,但对于尚未保存的笔记无效。我担心的是,当用户开始写新笔记时,向其中添加文件,然后改变主意,从不保存笔记(例如关闭浏览器)。我不希望那些上传的文件徘徊。

在此先感谢!

+0

对于典型的表单提交,在提交表单之前不会进行文件上传。 – horatio 2011-01-20 21:18:10

回答

1

有很多方法可以做到这一点。下面是我第一眼看到的一个: 当用户点击“新邮件”时生成“邮件ID”,然后当他想上传某些内容时就已经拥有了。

一种更实验的方式: 当他上传文件时生成文件的散列(p.e.MD5带有时间戳或类似的东西)。当他最终提交邮件时,将散列添加到邮件中,并将其用作上次上传的关键字。

2

好的,所以他打开那个URL,他看到了你设计的布局(ASCII艺术的荣誉)。在呈现页面之前,您已经创建了一个空白记录记录,它将为您提供ID。他上传文件(在硬盘上的某个地方,并且只保存另一个数据库表中的路径,请记住文件注释关系是多对一的),瞧!你已经有了一个ID与他们联系! 至于孤立文件与废弃的笔记..好吧,有几个选项来处理,但他们都结束了在你的Web应用程序中的另一个章节,称为'维护'。我会在用户资料中保留最后一个笔记ID,并且不会让他在不保存或丢弃前一个笔记的情况下创建新笔记。

1

回顾AJAX之前的日子,如果您想将文件附加到表单中,只需在表单提交时上传文件即可。现在我们有各种聪明的方式来传输文件,或者至少有两种或三种流行的方式,有些使用Flash或jQuery。但是,您已经发现了这些技术的主要维护问题:每当用户并行上传图像以填写表单时,不能保证表单将被提交。你必须为这些上传的文件提供某种超时机制,这通常意味着启动某种内务过程。您可以在架构中添加另一个移动部分,并且需要定期监控它以确保事物不会失控。

根据流量的预期频率和大小,您需要定义一些参数,以便何时可以删除孤立文件。如果您预计每天的上传次数少于100次,那么每日清除应该没问题。在每次清除时,您想要删除任何一段时间内孤立的文件。为此,您需要一种识别旧文件的机制,并且可以将文件与表格记录进行比较,这需要额外的数据库资源,这可能会影响网站的速度。这意味着你应该将这些文件移动到别的地方,这样可以更容易地识别出潜在的孤儿。

现在,当您监控此过程时,您可以决定是否需要更频繁地运行。如果你做出了糟糕的设计决定,那么做家务将会更加痛苦,特别是如果它每小时或更频繁地运行。

祝你好运!

相关问题