通过按钮下载文件

时间:2013-03-20 14:38:43

标签: asp.net vb.net

在我的网页上,我有一个按钮。 当我点击它时,我希望它将文档发送到浏览器。

以下是点击事件中的代码:

Private Sub btMNCgetTemplate_Click(sender As Object, e As EventArgs) Handles btMNCgetTemplate.Click
    Dim MNCid As Integer = Me.cbMNCrequestType.SelectedValue
    Dim mncRT As New MinorNetworkChangeTypeOfRequests
    Dim MNCrq As New MNCTypeOfRequestItem

    MNCrq = mncRT.Find(MNCid)
    If MNCrq IsNot Nothing Then
        If MNCrq.Form.ToLower.EndsWith(".doc") Or 
           MNCrq.Form.ToLower.EndsWith(".docx") Then
            Response.ContentType = "Application/msword"
        Else
            Response.ContentType = "Application/x-msexcel"
        End If

        Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}", MNCrq.Form))
        Response.TransmitFile(Server.MapPath(String.Format("~/forms/{0}", MNCrq.Form)))
        Response.End()
    End If
End Sub

MNCrq对象Form属性具有文件名。

一开始这个工作正常,用户有一个保存文件窗口。 但现在它不再起作用了。 当我在Chrome中运行网站时,没有任何反应。 当我在IE9中运行该网站时,我在某个不属于我的文件中收到以下错误消息:

Unhandled exception at line 940, column 13 in http://localhost:29226/ScriptResource.axd?
d=DbqlGCg_y1TWNdNykQXSWTqf7VMHZvfOOc8W9SvKy5VJEvrKhkNOK5JNcaIC4d76X42JcWSxljh5epK1GqlRC4_NnfoLlKD1PfZ2-dNg98DHOKlBmICo8PKGlg73PqEQJR5AdM_sf6udu_6Vkp3cg9MicDI1&t=7c776dc1

0x800a139e - Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed.

我在这里做错了什么?

RG, 埃里克

3 个答案:

答案 0 :(得分:1)

您可以使用WriteFile。请确保Server.MapPath(String.Format("~/forms/{0}", MNCrq.Form))返回存在的有效文件。

Response.AddHeader("Content-Disposition", 
   String.Format("attachment; filename={0}", MNCrq.Form))
Response.WriteFile(Server.MapPath(String.Format("~/forms/{0}", MNCrq.Form)))
Response.End();

答案 1 :(得分:0)

我只是一个专业人士,但我会尝试建议我曾经做过的事情:)

为什么不将文件添加到您网站的目录中,并作为随机示例使用

Server.Transfer("C:\Users\Eric\Desktop\Website\Attachments\WordFile.docx") 

或将按钮更改为超链接并将其链接到文件?这是一种使事情变得更简单的方法,它需要的代码更少,而且不容易出错。

答案 2 :(得分:0)

使用其他解决方案。

我创建了一个新的ASPX页面,并在load事件中输入以下代码:

 Dim bestand As String = Page.Request("file")

Response.ClearContent()
Response.ClearHeaders()
Dim fi As New FileInfo(Server.MapPath(".\forms\") + bestand)

Response.ContentType = "application/x-unknown" ' arbitrary 
Response.AddHeader("Content-Disposition", "attachment; filename=" + bestand)
Response.AddHeader("Content-Length", fi.Length.ToString())

Response.BinaryWrite(File.ReadAllBytes(fi.FullName))

Response.End()

来自我的按钮事件我称之为:

 Response.Redirect(String.Format("givefile.aspx?file={0}", MNCrq.Form), False)

现在我收到了文件。

RG。 埃里克