据我所知,自2012版以来SQL Server有一个新功能FileTable
。它允许我们将文件存储在文件系统中并从T-SQL中使用它们。
我正在尝试使用此功能,但我不知道如何正确地执行此操作。
通常,我不知道如何访问存储在文件表中的文件。假设我有asp.net MVC应用程序,并且我在img标签的网页上显示了很多图像。我想将这些图像存储在Filetable中,并将它们作为文件系统中的文件进行访问。但我不知道这些文件的存储位置以及如何将它们用作文件。现在我的图像存储在文件夹图像中的Web应用程序目录中,我写了这样的内容:
<img src='/images/mypicture.png' />
如果我将图像移动到文件表中我应该在src中写什么?
<img src='path-toimage-in-filetable' />
答案 0 :(得分:0)
我认为FileTable实际上意味着FileStream。关于这一点的几点说明:
VARBINARY(MAX)
或{{1适当的数据类型。如果您的图片平均非常小(只有几KB),请考虑使用XML
列。VARBINARY(MAX)
FILESTREAM
执行此操作(请参阅下面的代码示例,了解一个实现),但是您将为每个请求敲击SQL服务器,除非您将图像存储在其他地方,无论如何浏览器可以正确缓存(我的示例不会这样做) - 如果您将它们存储在其他地方以便在浏览器中进行渲染,您也可以将它们存储在那里(一旦这些图像将不具有事务一致性)无论如何都要复制到其他驱动器/磁盘/位置。)尽管如此,这里有一个如何使用ADO.NET访问FILESTREAM
数据的示例:
FILESTREAM
显然,如果你有很多图像需要处理,这不是一个理想的方法 - 不要试图将SQL服务器的实例变成你应该使用CDN的那个......但是,如果你还有其他很好的理由,你应该尝试在单个请求/事务中抓取尽可能多的图像(例如,如果你知道你在一个页面上显示50个图像,在单个事务范围内获得所有50个图像,请不要使用50个事务范围 - 此代码不会处理该事务。)
答案 1 :(得分:0)
我认为你仍然不需要这个,不管怎样我会把答案发给其他感兴趣的人。 首先,文件表仍然是一个表,因此,如果要从中访问数据,则需要使用Select SQL语句。所以你需要这样的东西:
select name, file_stream from filetable_name
where
name = 'file_name',
file_type = 'file_extension'
只需在你的asp.net应用程序中执行这样的语句,然后获取结果并使用file_stream列获取存储文件的二进制数据。如果要从HTML检索文件,首先需要在控制器中创建一个操作,该操作将返回检索到的文件:
public ActionResult GetFile(){
..
return File(file.file_stream,file.file_type);
}
在此之后,输入HTML标签,如:
<img src="/controller/GetFile" />
希望这可以帮到你!
如果你想知道文件表的架构,请参阅
here