在asp.net下载任何类型的文件c#

时间:2017-09-18 08:23:21

标签: c# asp.net

我在点击按钮时使用此代码,我可以从中下载具有特定名称的文件。

但是,当用户上传文件时,我希望在他的详细信息中像任何Id证明详细信息文件一样。

现在验证用户admin是否希望查看他的Id证明详细信息。 因此,他将下载用户已上传并保存在数据库中的文件。

因此文件可以是任何类型或扩展名。

private void Button1_click(object sender, System.EventArgs e)
{
    string filename="C:\myuploads\invoice.pdf";
    Response.ContentType = "Application/pdf";
    Response.AppendHeader("Content-Disposition", "attachment;" + filename +);
    Response.TransmitFile(Server.MapPath(filename));
    Response.End();
}

3 个答案:

答案 0 :(得分:0)

当用户上传文件时,您应该能够使用已发布文件的ContentType属性。这假设您使用了文件上传控件,如:

<asp:FileUpload ID="uploadFile" runat="server" />

上传文件后,使用

获取内容类型
string fileType = uploadFile.PostedFile.ContentType

将该值保存在您的数据库中,并在以后下载时将其用作现有代码中Reponse.ContentType的值。

答案 1 :(得分:0)

我认为这就是你所追求的目标。

private void DownloadFile(string file)
{
    var fi = new FileInfo(file);
    Response.Clear();
    Response.ContentType = "application/octet-stream";
    Response.AddHeader("Content-Disposition", "attachment; filename="+ fi.Name);
    Response.WriteFile(file);
    Response.End();
}

所以你只需要这样称呼它:

string myfile = @"c:\path\To\Files\myFile.pdf"; //this wouldn't be a static string in your code
DownloadFile(myfile);

答案 2 :(得分:0)

感谢您回答我的问题。我的LinkBut​​ton从特定用户Id的数据库下载文件成功运行。

实际上我的下载链接在更新面板中,所以它需要“触发器”...而我的链接在GridView中所以我在触发器中传递了链接按钮ID。

每当我们在更新面板中使用GridView并且有一个LinkBut​​ton从特定用户ID的数据库下载文件。我们应该传递** GridView Id 而不是模板字段中的LinkBut​​ton Id。**

 <asp:UpdatePanel ID="upd" runat="server">
        <ContentTemplate>
    <asp:GridView ID="grd_UserList" runat="server" CssClass="table"
      DataKeyNames="Uid" AutoGenerateColumns="false" AllowPaging="false">
    <asp:TemplateField HeaderText="Task Name">
          <ItemTemplate>
    <asp:LinkButton Id="LinkDownload" runat="Server" CommandArgument='<%# Eval("Attachment") %>' >
          </ItemTemplate>
      </asp:TemplateField>

      </asp:GridView>
     </ContentTemplate>
        <Triggers>
            <asp:PostBackTrigger ControlID="grd_UserList" />
        </Triggers>
    </asp:UpdatePanel>