Asp.net 从文件系统而不是数据库中存储和检索图像

Asp.net 从文件系统而不是数据库中存储和检索图像,asp.net,database,file-upload,Asp.net,Database,File Upload,我需要一个存储图像的地方。我的第一个想法是使用数据库,但是。这似乎适合我的情况,但我如何实现它 文件名必须是唯一的,如何做到这一点。我应该使用guid吗 如何检索文件,我应该使用文件名直接进入数据库,创建一个aspx页面,并将文件名或主键作为查询字符串传递,然后读取文件 客户端缓存呢?当使用像image.aspx?id=123这样的页面时,是否启用了客户端缓存 删除关联记录时,如何删除文件 我想还有很多事情我还没想过 非常欢迎链接、样品和指南 你似乎对如何做这件事犹豫不决,所以我给你一些想法让

我需要一个存储图像的地方。我的第一个想法是使用数据库,但是。这似乎适合我的情况,但我如何实现它

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

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

客户端缓存呢?当使用像image.aspx?id=123这样的页面时,是否启用了客户端缓存

删除关联记录时,如何删除文件

我想还有很多事情我还没想过

非常欢迎链接、样品和指南

你似乎对如何做这件事犹豫不决,所以我给你一些想法让你去做

如果要使用文件系统,请确保知道每个目录允许的文件数限制,以便可以设置创建子目录的系统

我会做一张这样的桌子:

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
列,但我更喜欢基于常量根值+一些特定于键的值来计算。例如,完整的文件名和目录为:

常量\u Root+'\'+OrderID+'\'+InternalFileName

您可以将InternalFileName设置为原始文件的上载ID和文件扩展名。这样它将是唯一的,但您必须将该行作为流程的第一部分插入,并在知道文件名和标识/自动生成行值后进行更新。您可以将InternalFileName设置为类似于YYYYMMDDHHMISSMMM的内容,并将原始文件的文件扩展名设置为文件扩展名,根据您使用子目录的方式,文件扩展名可能足够唯一

我喜欢存储一个使检测重复数据变得容易的文件

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

你似乎对如何做这件事犹豫不决,所以我给你一些想法让你去做

如果要使用文件系统,请确保知道每个目录允许的文件数限制,以便可以设置创建子目录的系统

我会做一张这样的桌子:

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
列,但我更喜欢基于常量根值+一些特定于键的值来计算。例如,完整的文件名和目录为:

常量\u Root+'\'+OrderID+'\'+InternalFileName

您可以将InternalFileName设置为原始文件的上载ID和文件扩展名。这样它将是唯一的,但您必须将该行作为流程的第一部分插入,并在知道文件名和标识/自动生成行值后进行更新。您可以将InternalFileName设置为类似于YYYYMMDDHHMISSMMM的内容,并将原始文件的文件扩展名设置为文件扩展名,根据您使用子目录的方式,文件扩展名可能足够唯一

我喜欢存储一个使检测重复数据变得容易的文件

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