C# 如何在数据库和磁盘(如BaseCamp document manager)中创建相同文件的版本
如果您使用过“文档管理器”页面,也可以在此处使用。我喜欢在同一个文件上传两次时创建版本的特性,[用户可以选择指定将文件创建为新版本]。您认为这些文件在C# 如何在数据库和磁盘(如BaseCamp document manager)中创建相同文件的版本,c#,file,file-upload,document,basecamp,C#,File,File Upload,Document,Basecamp,如果您使用过“文档管理器”页面,也可以在此处使用。我喜欢在同一个文件上传两次时创建版本的特性,[用户可以选择指定将文件创建为新版本]。您认为这些文件在数据库中如何作为记录维护,在磁盘中如何作为文件维护。从我的检查,似乎文件保存如下 结构 例如,考虑以下因素 例子 用户名为“mak” 项目名称“izord”和 文件名为“base.html” 它有两个版本,这里是目录结构 [mak] [izord] [base] [V1] base
数据库
中如何作为记录维护,在磁盘
中如何作为文件维护。从我的检查,似乎文件保存如下
结构
例如,考虑以下因素
例子
[mak]
[izord]
[base]
[V1]
base.html
[V2]
base.html
我的假设可能是错误的,但这就是为什么我要在这里纠正它
问题:
首先,我非常确定他们将文件存储在S3中,所以要考虑到这一点 至于数据库结构,我会有类似
Account: ID
Project: ID, AccountID
File: ID, ProjectID, Name, ContentType, CurrentRevision
FileRevision: ID, FileID, ContentLength, AmazonS3Key, CreatedAt, CreatedBy
然后将每个文件存储在//
目录下(S3中没有实际的目录,但它们是用正斜杠模拟的)。文件内容位于适当的目录中:
<bucket>/<account-id>/<project-id>/<file-name>
v1
v2
...
v13
///
v1
v2
...
v13
上传文件的新版本只需将v
条目添加到S3存储中即可
还请注意,公开帐户和项目的ID可能不是一个好主意,因此我将使用这些ID的哈希:
//
首先,我非常确定它们将文件存储在S3中,所以要考虑到这一点
至于数据库结构,我会有类似
Account: ID
Project: ID, AccountID
File: ID, ProjectID, Name, ContentType, CurrentRevision
FileRevision: ID, FileID, ContentLength, AmazonS3Key, CreatedAt, CreatedBy
然后将每个文件存储在//
目录下(S3中没有实际的目录,但它们是用正斜杠模拟的)。文件内容位于适当的目录中:
<bucket>/<account-id>/<project-id>/<file-name>
v1
v2
...
v13
///
v1
v2
...
v13
上传文件的新版本只需将v
条目添加到S3存储中即可
还要注意的是,公开帐户和项目的ID可能不是一个好主意,所以我会用散列法:
//
是的,他们可能会使用亚马逊,但当查看视频时,当用户悬停在文件链接上时,它似乎在目录中。是吗?是的,我同意第2点,因为这就是他们的结构从视频中看出来的方式projects/631767/file/3152703/filename
,projects/631767/file/3152700/filename
31527部分可能是一些内容的散列,然后他们会附加01,02,03作为版本。通常在S3中托管内容的方法是有一个指向您站点的链接,然后生成一个所谓的“预签名URL”并重定向回它。是的,他们可能会使用amazon,但是,当查看该视频时,当用户将鼠标悬停在文件链接上时,它似乎位于目录中。是吗?是的,我同意第2点,因为这就是他们的结构从视频中看出来的方式projects/631767/file/3152703/filename
,projects/631767/file/3152700/filename
31527部分可能是某个内容的散列,然后它们会附加01,02,03作为版本。在S3中托管内容的通常方式是有一个指向您的站点的链接,该链接将生成一个所谓的“预签名URL”并重定向回它。