C# 如何使用原始文件名作为有效Url发布存储在SQL中的文档?
我有一个数据库,它将PDF文档作为字节流存储在varbinary(max)列中,原始文档名存储在带有文档扩展名的varchar列中,主键是guid。(此架构是固定的,文档必须驻留在数据库中) 将文档作为流检索、写入临时文件或直接流式传输到web浏览器都没有问题 我的问题是,如何使用原始文件名通过Url公开文档 我正在尝试做的一个很好的例子是SharePoint,它在后台将文件存储在SQL数据库中,并将文档作为Url(具有原始文件扩展名)公开,可以用浏览器直接打开 例如:C# 如何使用原始文件名作为有效Url发布存储在SQL中的文档?,c#,sql,sharepoint,iis,C#,Sql,Sharepoint,Iis,我有一个数据库,它将PDF文档作为字节流存储在varbinary(max)列中,原始文档名存储在带有文档扩展名的varchar列中,主键是guid。(此架构是固定的,文档必须驻留在数据库中) 将文档作为流检索、写入临时文件或直接流式传输到web浏览器都没有问题 我的问题是,如何使用原始文件名通过Url公开文档 我正在尝试做的一个很好的例子是SharePoint,它在后台将文件存储在SQL数据库中,并将文档作为Url(具有原始文件扩展名)公开,可以用浏览器直接打开 例如: (平台为SQL 2008
(平台为SQL 2008、IIS 7.5、.NET 4、C#)如果您的站点使用ASP.NET MVC,您只需按名称为/文档下载文件添加控制器即可:
routes.MapRoute(
"GetFiles",
"Documents/{fileName}",
new
{
controller = "Files",
action="GetFile",
}
);
和控制器类:
public class FilesController : Controller
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetFile(string fileName)
{...
}
}
您需要在响应中添加
内容处置
标题:
Content-Disposition: attachment; filename=original_name.pdf
请参阅完整示例,其中包含将URL映射到数据库中文件的路由、使用流的高效下载以及使用流的高效上载
布线部分与MVC相对简单:
routes.MapRoute(
"Media",
"Media/{filename}",
new { controller = "Media", action = "GetFile" },
new { filename = @"[^/?*:;{}\\]+" });
但是其他一些细节,特别是使用正确流式语义的上传,可能比人们通常期望的要复杂一些。大多数示例只是忽略这些问题,并在将整个文件上载到数据库之前创建一个内存中的副本
后续文章将文章扩展到了FILESTREAM存储。如果不使用MVC,您可以使用称为 这将允许您以任何喜欢的方式处理对url的请求。 您将在web.config中添加代码,如下所示:
<httpHandlers>
<add verb="*" path="/documents/*.pdf" type="Documents.LoadDocument,NameSpace"/>
</httpHandlers>
这描述了如何使用IHttpHandler提供动态内容
我相信这正是你想要的。您将能够根据实际的http请求从数据库加载文档 谢谢大家的精彩回答,我们将做一些测试并分享结果。