我正在开发一个允许您编写笔记的Web应用程序。我想添加一些功能以允许用户向笔记添加附件,但是我在查明其背后的逻辑时遇到了一些麻烦。
我希望它有点像webmail或phpBB论坛帖子。你开始一条新消息。那里有一个文件上传输入元素,旁边有一个“添加”按钮。添加文件时,会上传该文件,您可以继续编写邮件。当您最终单击“提交”时,它会创建注释并将上传的文件与其关联。这是一些ASCII艺术:
Subject: ______________
Message: ______________
______________
______________
Attachments: some_file.txt
resume.odt
______________ [Browse][Add]
[Save]
但是如何在上传时将上传与备注相关联?它尚未保存。它没有身份证。通常我会添加一个数据库表,将上传的文件与注释ID相关联,但这对于尚未保存的注释不起作用。我担心的是,当用户开始写一个新笔记时,会向其添加一个文件,然后改变主意,从不保存笔记(例如关闭浏览器)。我不希望那些上传的文件挥之不去。
提前致谢!
答案 0 :(得分:2)
好吧,所以他打开那个URL,看到你设法绘制的布局(对于ASCII艺术而言是赞誉)。在渲染页面之前,您已经创建了一个空注释记录,它将为您提供ID。他上传文件(在硬盘驱动器上的某个地方,你只保存另一个数据库表中的路径,记住文件 - 注释关系是多对一的),瞧!,你已经有了一个ID来与他们联系! 至于带有废弃笔记的孤儿文件..好吧,有一些选项可以解决这个问题,但所有这些选项最终都会在您的网络应用程序中创建另一个章节,称为“维护”。我会在用户个人资料中保留最后一个笔记ID,并且不会让他创建新笔记而不保存或丢弃之前的笔记。
答案 1 :(得分:1)
有很多方法可以做到这一点。这是我乍一看的那个: 当用户点击“新邮件”时生成“邮件ID”,然后当他想要上传内容时你已经拥有它。
一种更实验性的想法: 上传文件时生成文件的哈希值(p.e.MD5,带有时间戳或类似内容)。当他最终提交邮件时,将哈希添加到邮件中,并将其用作上一次上传的密钥。
答案 2 :(得分:1)
回到AJAX之前的日子,如果您想将文件附加到表单,您只需在表单提交时上传文件即可。现在我们有各种聪明的方式来传输文件,或者至少有两三种流行的方式,一些使用Flash或jQuery。但是您已经发现了这些技术的主要维护问题:每当用户上传图像并填写表单时,无法保证表单将被提交。您必须为这些上传的文件提供某种超时机制,这通常意味着启动某种内务处理流程。您可以在架构中添加另一个移动部件,并且需要定期监视它以确保事情不会失控。
根据预期的流量频率和大小,您需要定义一些可以删除孤立文件的参数。如果您预计每天上传的内容少于100次,那么每日清除应该没问题。在每次清除中,您希望删除任何已经孤立一段时间的文件。要做到这一点,您需要一种识别旧文件的机制,虽然您可以将文件与表记录进行比较,但这需要额外的数据库资源,这可能会影响您的站点速度。这是一个暗示,你应该在处理完这些文件后将其移动到其他地方,这样就可以更容易地识别潜在的孤儿。
现在,当您监控此过程时,您可以决定是否需要或多或少地运行。如果做出糟糕的设计决定,那么做家务管理会更加痛苦,特别是如果它每小时或更频繁地运行。
祝你好运!