使用mvc2010从sql server下载具有特定名称的文件

本文关键字:定名称 文件 下载 mvc2010 sql server 使用 | 更新日期: 2023-09-27 17:57:52

我正在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;,其中uploadFileHttpPostedFileBase。因此,对于insance,如果文件是Test.txt并且在用户桌面中,则它存储C:'Users'user'Desktop'test.txt

然后,在查看/下载文件时,我的Controller:中有一个指向ActionResult的链接

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)可以用它的"真名"来命名它(我的意思是,在我们的例子中:Test
或者也许是一种以不同方式存储名称的方法,以便它只存储其"真实名称",而不是名称及其整个路径?

非常感谢您抽出时间!

使用mvc2010从sql server下载具有特定名称的文件

尝试

Response.AddHeader("content-disposition", "attachment;filename=" + Path.GetFileName(file.Name));

如果您想要没有扩展名的文件名,即.txt位,则

Response.AddHeader("content-disposition", "attachment;filename=" + Path.GetFileNameWithoutExtension(file.Name));

路径在System.IO命名空间中。