我需要一个存放图像的地方。我的第一个想法是使用数据库,但是many seems to recommend using the filesystem。这似乎适合我的情况,但我该如何实现呢?
文件名必须是唯一的,如何做到这一点。我应该使用guid吗?
如何检索文件,我应该使用文件名直接访问数据库,创建一个aspx页面并将文件名或主键作为查询字符串传递,然后读取文件。
如果使用像image.aspx这样的页面启用客户端缓存呢?id = 123?
删除相关记录后,如何删除文件?
我想还有很多其他事情我还没有想过。
非常欢迎链接,样品和指南!
答案 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,但如果将它们存储在数据库中,则可以更轻松地进行一些维护,因为您可以查询大型文件或某些类型的文件。