【问题标题】:Download any kind of file in asp.net c#在asp.net c#中下载任何类型的文件
【发布时间】:2018-02-26 17:16:48
【问题描述】:

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

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

现在验证用户管理员是否希望查看他的身份证明详细信息。 所以他会下载用户上传并保存在数据库中的文件。

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

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

【问题讨论】:

  • 您确定想要一个允许任何文件以及可执行文件(.exe、.msi ...)的上传功能吗?这应该会有所帮助:stackoverflow.com/questions/6733136/open-any-file-from-asp-net
  • 虽然stackoverflow.com/questions/6783921/… 并不完全是重复的,但它的答案确实提到了application/octet-stream,这是一种通用的内容类型,您可以将其用于您想要的任何文件。
  • 你到底在问什么?这真的不清楚。下载文件等哪一部分你不明白?
  • 我想下载用户在gridview中点击下载按钮上传的文件,文件可以是任何类型。
  • @MohiniGalhotra 请不要在评论中重复问题文本。或“但它不起作用”。它根本没有帮助。实际上解释问题是什么以及你想,会有所帮助。您已经发布了下载代码,您已经使用了 FileUpload 控件。那你为什么需要向 SO 提出问题呢?

标签: c# asp.net


【解决方案1】:

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

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

文件上传后,使用获取内容类型

string fileType = uploadFile.PostedFile.ContentType

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

【讨论】:

  • 是的,我在那里使用文件上传控件,除了这个控件,我还有下载链接按钮来下载已上传的文件..
  • 好吧,我认为这向您展示了如何捕获文件的内容类型,并在您提供文件进行下载时使用它,以便正确下载文件。这是否回答了您的问题,还是您的意思是别的?
  • @MohiniGalhotra 问题是什么?您已经拥有上传控件,您发布了将文件发送到浏览器的代码。问题是什么? 问题是什么?
  • @MohiniGalhotra 这不是问题描述。你试过调试吗? 可以您的代码读取网站文件夹之外的任意文件吗?我对此表示怀疑。最有可能的是,有一个权限异常被 catch{} 或类似的东西隐藏了
  • @MohiniGalhotra MapPath 用于将相对路径转换为相对于网站文件夹的绝对路径。您不能使用它或需要它来读取绝对路径。权限绝对是一个问题,但代码可能正在寻找错误的路径。默认情况下,您的网络应用无法读取站点根文件夹之外的任何内容
【解决方案2】:

我想这就是你所追求的。

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

【讨论】:

  • 耶特...感谢您的帮助。因为您采用了变量字符串 myfile = @"c:\path\To\Files\myFile.pdf";下载文件(我的文件);这将获取名为 myfile.pdf 文件名的文件。但就我而言,任何文件都可以具有任何类型的扩展名。
  • 是的,该代码将下载您要求的任何文件类型,因此将myfile 设置为您需要的任何文件,然后您就可以排序了。可以是string myfile = @"c:\path\To\Files\myFile.xyz",它会下载它。
  • 这个解决方案效果很好,但我无法让它与 wav 文件一起使用。 Mp3 运行良好。
【解决方案3】:

感谢您回答我的问题。我的链接按钮从特定用户 ID 的数据库中下载文件成功。

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

每当我们在更新面板中使用 GridView 并且有一个链接按钮可以从特定用户 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>

【讨论】:

    猜你喜欢
    • 2011-04-05
    • 2018-07-19
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多