Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在asp.net c中下载任何类型的文件#_C#_Asp.net - Fatal编程技术网

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

C# 在asp.net c中下载任何类型的文件#,c#,asp.net,C#,Asp.net,我在单击按钮时使用此代码,从中可以下载具有特定名称的文件 但是我想,当用户上传了一个文件后,在他的详细信息中,就像任何身份证明详细信息文件一样 现在验证用户管理员是否希望查看his Id证明详细信息。 所以他会下载用户上传的文件,并保存在数据库中 因此,文件可以是任何类型或扩展名 private void Button1_click(object sender, System.EventArgs e) { string filename="C:\myuploads\invoice.pdf

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

但是我想,当用户上传了一个文件后,在他的详细信息中,就像任何身份证明详细信息文件一样

现在验证用户管理员是否希望查看his 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();
}

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

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

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

我想这就是您要找的

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);

谢谢你回答我的问题。我的链接按钮成功地从数据库中下载了特定用户Id的文件

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

每当我们在更新面板中使用GridView,并且有一个LinkButton可以从数据库中下载特定用户Id上的文件时。我们应该传递**GridView Id而不是模板字段中的LinkButton 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>


您是否确定需要允许任何文件(也包括可执行文件(.exe、.msi…)的上载功能?这应该会有帮助:虽然它的答案并不完全是重复的,但它确实谈到了
应用程序/octet流
,这是一种通用的内容类型,您可以用于任何您想要的文件。您到底在问什么?真的不清楚。下载文件的哪一部分等。您不明白吗?我想下载一个用户在gridview中单击“下载”按钮时上载的文件,文件可以是任何类型。@MohiniGalhotra请不要重复评论中的问题文本。或者“但它不起作用”。这根本没用。实际上,解释问题是什么以及你想问什么会有所帮助。您已经发布了下载代码,您已经使用了FileUpload控件。那你为什么要发一个问题呢?是的,我在那里使用文件上传控制,除了这个控制,我还有下载链接按钮来下载已经上传的文件。好的,我想这会告诉你如何捕获文件的内容类型,并在以后提供下载文件时使用它,以便正确下载文件。这回答了你的问题吗,还是你的意思是别的?@MohiniGalhotra,问题是什么?您已经拥有上载控件,您发布了将文件发送到浏览器的代码。问题是什么?问题是什么?@MohiniGalhotra这不是问题描述。你试过调试吗?您的代码能否读取网站文件夹外的任意文件?我对此表示怀疑。最有可能的是,存在一个权限异常,它被
catch{}
或其他东西隐藏similar@MohiniGalhotra
MapPath
用于将相对路径转换为相对于网站文件夹的绝对路径。您不能使用它或需要它来读取绝对路径。权限无疑是一个问题,但代码可能正在寻找错误的路径。默认情况下,您的web应用程序无法读取网站根文件夹之外的任何内容。。。谢谢你的帮助。因为您采用了一个变量字符串myfile=@“c:\path\To\Files\myfile.pdf”;下载文件(myfile);这将拾取名为myfile.pdf文件名的文件。但在我的例子中,可以有任何类型的扩展名的文件。是的,并且该代码将下载您要求的任何文件类型,因此将
myfile
设置为您需要的任何文件,然后进行排序。它可以是
string myfile=@“c:\path\To\Files\myfile.xyz”
,它会下载它。这个解决方案很好用,但我一直无法让它与wav文件一起使用。Mp3很好用。
 <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>