1

私はmvc 2010 Expressを使用してc#でアプリケーションを作成しています。ある時点で、ユーザーはファイルをアップロードして、データベースとの間で開いたりダウンロードしたりできます。 ファイルを保存するテーブルは次のとおりです。

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。たとえば、ファイルが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を付ける方法はありますか (おそらく myを変更します) 。(つまり、私たちの例では:)または、名前とそのパス全体ではなく「実際の名前」だけを保存するように、名前を別の方法で保存する方法はありますか?Test

お時間をありがとうございました!

4

2 に答える 2

2

試す

Response.AddHeader("content-disposition", "attachment;filename=" + Path.GetFileName(file.Name));
于 2013-02-05T16:12:03.873 に答える
1

拡張子なしのファイル名、つまり .txt ビットが必要な場合は、

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

パスは System.IO 名前空間にあります。

于 2013-02-05T16:16:45.980 に答える