【发布时间】:2008-10-22 22:16:38
【问题描述】:
我需要客户能够下载已发送给他们的信件的 PDF。
我已经阅读了有关文档或图像的数据库与文件系统存储的线程,听起来确实是这样的共识是,对于不仅仅是几个图像,文件系统是要走的路。
我想知道的:
- 一个合理的替代方案是将信件详细信息存储在数据库中,并在请求时“即时”重新创建 PDF?
- 与从文件系统中获取 PDF 相比,这种方法是优还是劣?
【问题讨论】:
标签: c# asp.net sql-server-2005 itext
我需要客户能够下载已发送给他们的信件的 PDF。
我已经阅读了有关文档或图像的数据库与文件系统存储的线程,听起来确实是这样的共识是,对于不仅仅是几个图像,文件系统是要走的路。
我想知道的:
【问题讨论】:
标签: c# asp.net sql-server-2005 itext
如果是出于存档目的,我肯定会存储 PDF,因为将来,您的 PDF 生成脚本可能会更改,然后这封信将与最初发送的不完全相同。客户会期望它完全一样。
不管哪种方法更好,有时最好选择哪种方法更安全。
【讨论】:
我会出于两个原因将其存储起来
1) 如果您更改了生成 PDF 的方式,您可能不希望更改历史项目。如果你每次都生成它们,要么它们会改变,要么你需要保留兼容性代码来生成“旧式”记录
2) 磁盘空间便宜。用户的耐心不是。除非您真的迫切需要存储或提取存储比生成 PDF 更难,否则请善待您的用户并将其存储。
显然,如果您从稀疏数据集每小时创建数千个这样的数据,您可能没有存储空间。但如果你有空间,我会投票支持“使用它”
【讨论】:
您必须保留发送给客户的信件记录是否有取证原因?如果您要即时重新生成,您怎么知道未来的代码更改不会重写这封信(或者,如果该信息用于诉讼,至少客户可以在法庭上提出该论点)......
【讨论】:
我倾向于说“这取决于”。
当一个文档被多次请求时,如果您在第一次请求时编写它并随后检索它,可能会节省很多。
OTOH 如果对文档的大多数请求都是一次性类型的,并且创建过程不会占用您的大部分服务器容量,那么动态将具有明显的优势。
【讨论】:
如果您使用的是 ASP.NET,为什么不缓存 PDF。如果您愿意,您的缓存可以存储在数据库中,或者只要您首先需要它就可以保留在内存中。 enterprise library 在缓存应用程序块中为您实现了这一点,并且使用起来非常简单。如果你缓存对象,使用块在数据库中创建一个存储,然后在需要时加载它,你不必担心重新创建它。
【讨论】:
需要考虑的一点是,PDF 是基于某个时间点存在的数据生成的。例如。基于上个月数据的账单?
如果是这样,您会每个月使用相同的模板来生成这封信吗? 如果/当字母格式发生变化时会发生什么,如果您即时重新生成它不再是发送给他们的相同。 是否可以将 PDF 流存储到数据库中?
我猜我在说什么,您是否需要准确表示发送给用户的内容,还是那样灵活?
【讨论】:
是动态生成 pdf 文件还是静态存储它们的问题听起来更像是一个法律问题而不是编程问题。
如果您无法获得可以为此提供指导的法律顾问,那么谨慎行事并静态存储它们会更安全。
【讨论】:
只要 PDF 文档是永久性的(不仅仅是工作文档,而是正式签署并发送到公司其他地方或公司外部的文件),您就应该拥有一份您网络上的此 PDF 文件,以及您数据库中此文件的链接。
您不能依靠可用数据在不同时间复制相同的文档,主要是因为:
【讨论】: