存储和检索文件系统而不是数据库中的图像

时间:2010-03-17 11:07:53

标签: asp.net database file-upload

我需要一个存放图像的地方。我的第一个想法是使用数据库,但是many seems to recommend using the filesystem。这似乎适合我的情况,但我该如何实现呢?

文件名必须是唯一的,如何做到这一点。我应该使用guid吗?

如何检索文件,我应该使用文件名直接访问数据库,创建一个aspx页面并将文件名或主键作为查询字符串传递,然后读取文件。

如果使用像image.aspx这样的页面启用客户端缓存呢?id = 123?

删除相关记录后,如何删除文件?

我想还有很多其他事情我还没有想过。

非常欢迎链接,样品和指南!

1 个答案:

答案 0 :(得分:1)

Uploading Files in ASP.NET 2.0

你似乎在谈论如何做到这一点,所以我会给你一些想法,让你去。

如果要使用文件系统,请确保知道每个目录允许的文件数限制,因此您可以设置创建子目录的系统。 http://ask-leo.com/is_there_a_limit_to_what_a_single_folder_or_directory_can_hold.html

我会做一个像这样的表:

FileUpload
UploadID          int identity/auto generate PK, used as FK in other tables
InternalFileName  string
DisplayFileName   string
Comment           string
MimeType          string
FileSizeBytes     int
FileHash          string MD5 Hash of a File
UploadUserID      int  FK to UserID
UploadDate        date

您将在“拥有”此上传的表格中包含UploadID,例如与其关联的订单等。您可以添加InternalDirectory列,但我更喜欢根据常量Root值计算此值+一些关键的具体价值。例如,完整的文件名和目录为:

Constant_Root + '\' +订单ID + '\' + InternalFileName

您可以将InternalFileName设置为原始文件中的UploadID和文件扩展名。这样它将是唯一的,但您必须将该行作为该过程的第一部分插入,并在您知道文件名和身份/自动生成行值之后更新它。您可以使InternalFileName类似于YYYMMDDhhmissmmm和原始文件中的文件扩展名,根据您使用子目录的方式,这可能是唯一的。

我喜欢存储MD5 Hash of a File,这样可以轻松检测重复项。

可以从文件系统中找到MimeType和FileSizeBytes,但如果将它们存储在数据库中,则可以更轻松地进行一些维护,因为您可以查询大型文件或某些类型的文件。