我正在 c#中使用 mvc 2010 Express 创建应用程序,并且在某些时候,用户可以上传文件并打开/下载它来往于数据库。
这是我存储文件的表:
CREATE TABLE [dbo].[tClientsFiles](
[IdClient] [int] NOT NULL,
[IdFile] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](256) NULL,
[Type] [varchar](256) NULL,
[Lenght] [money] NULL,
[Content] [varbinary](max) NULL,
[DateAdd] [datetime] NULL,
[UserAdd] [varchar](50) NULL)
在tClientsFiles.Name中,我使用uploadFile.FileName;
存储文件的路径和名称,其中uploadFile
是HttpPostedFileBase
。因此,对于insance,如果文件为Test.txt
并且它位于用户桌面中,则会存储C:\Users\user\Desktop\test.txt
然后,在查看/下载文件时,我的ActionResult
中有Controller
的链接:
public ActionResult GetFile(int id)
{
var file = dre.tClientsFiles.First(m => m.IdFile == id);
MemoryStream ms = new MemoryStream(file.Content, 0, 0, true, true);
Response.ContentType = file.Type;
Response.AddHeader("content-disposition", "attachment;filename=" + file.Name);
Response.Buffer = true;
Response.Clear();
Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
Response.OutputStream.Flush();
Response.End();
return new FileStreamResult(Response.OutputStream, file.Type);
}
打开文件时,会使用“名称”file.Name
对其进行命名,如下所示:c_Users_user_Desktop_Test
。
我的问题是:是否有办法(可能会修改我的Response.AddHeader
)仅用其“真实姓名”命名?(我的意思是,在我们的示例中:{{1 }})
或也许是以不同的方式存储名称的方式,以便它只存储其“真实姓名”而不是名称及其整个路径?
非常感谢你的时间!
答案 0 :(得分:2)
尝试
Response.AddHeader("content-disposition", "attachment;filename=" + Path.GetFileName(file.Name));
答案 1 :(得分:1)
如果你想要没有扩展名的文件名,即.txt位,那么
Response.AddHeader("content-disposition", "attachment;filename=" + Path.GetFileNameWithoutExtension(file.Name));
Path位于System.IO名称空间中。