我与MVC 2010速成创造C#的应用程序,并在某些时候,用户可以上传文件,并打开一个特定的名称/下载到/来自数据库。
下面是我在其中存储文件表:下载文件,使用mvc2010
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);
}
当打开文件时,它将其命名为“Name”file.Name
,如下所示:c_Users_user_Desktop_Test
。
我的问题是:有没有办法(也许修改我Response.AddHeader
),以命名它只是它的“真名”?(我的意思是,在我们的例子:Test
)
或者可能的方式来商店的名称以不同的方式,使其只存储它的“真名”,而不是名称和它的整个路径?
非常感谢您的时间!
正是我所需要的!非常感谢! (更改GetFileName GetFileName,原因如果不是它不承认它) – eryel
糟糕。应该检查,而不是从内存中去... – Pete