C# 在asp.net c中下载任何类型的文件#
我在单击按钮时使用此代码,从中可以下载具有特定名称的文件 但是我想,当用户上传了一个文件后,在他的详细信息中,就像任何身份证明详细信息文件一样 现在验证用户管理员是否希望查看his Id证明详细信息。 所以他会下载用户上传的文件,并保存在数据库中 因此,文件可以是任何类型或扩展名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
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@MohiniGalhotraMapPath
用于将相对路径转换为相对于网站文件夹的绝对路径。您不能使用它或需要它来读取绝对路径。权限无疑是一个问题,但代码可能正在寻找错误的路径。默认情况下,您的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>