从ASP .Net下载文件时,文本文件将附加HTML内容

Ahm*_*mad 5 vb.net asp.net download uploading text-files

我制作了一个页面,允许用户使用FileUpload Control将文件上传到服务器,并使用此代码处理其事件

Sub SaveAttachment()
    Dim root As String = "C:\temp\"
    Dim filename As String = FileUpload1.FileName
    Dim SaveName As String = root & filename
    FileUpload1.SaveAs(SaveName)
End Sub
Run Code Online (Sandbox Code Playgroud)

一切正常,我能够看到文件正在上传,并且文件的内容是完整的(与用户上传的文件完全相同)。

现在,为了将文件下载回用户(以后),我编写了另一个页面,该页面从Request.Parameter(“文件”)中读取文件名,并获取要下载给用户的文件。我已经编写了Download.aspx页来处理ASP部分中的下载(未使用任何背后的代码):

<%@ Import Namespace="System.IO"%>
<script language="VB" runat="server">
Sub Page_Load(sender As Object, e As EventArgs)

        Dim root As String = "C:\temp\"
        Dim filepath As String = Request.Params("file")
        If Not filepath Is Nothing Then
            filepath = root & filepath
            If File.Exists(filepath) And filepath.StartsWith(root) Then
                Dim filename As String = Path.GetFileName(filepath)
                Response.Clear()
                Response.ContentType = "application/octet-stream"
                Response.AddHeader("Content-Disposition", _
                  "attachment; filename=""" & filename & """")
                Response.Flush()
                Response.WriteFile(filepath)
            End If
        End If

End Sub
</script>
<form id="form1" runat="server">
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</form>
Run Code Online (Sandbox Code Playgroud)

我尝试上传图像文件,然后再次下载它们,但效果很好。但是,只有当我上传文本文件时,我才能获得该文件的内容以及一些HTML内容。

这是我上传的示例文件 上传前的原始文件

Here is my sample text file

It consists of 3 lines only
Run Code Online (Sandbox Code Playgroud)

这是我下载回来的文件 从服务器下载相同的文件

Here is my sample text file

It consists of 3 lines only
<form name="form1" method="post" action="FileDownload.aspx?file=sample_file.txt" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE5NTU5ODQyNTBkZNCYbOVZJDRUAOnIppQYkwHUSlb0" />
</div>

<span id="Label1">Label</span>
</form>
Run Code Online (Sandbox Code Playgroud)

我转到服务器上的文件并打开它,以确保其他HTML内容在那里,但是正如我所说,该文件已完美上传。只有下载后,它才会包含附加的HTML内容。

我做错了什么?我怎样做才能使这些附加的HTML代码消失?为什么此问题仅影响文本文件,而不影响图像,EXE,XLS,DOC等?

Kar*_*ren 3

确保通过调用Response.End()after来结束您的响应Response.WriteFile(filepath),否则您的表单将被附加到流中并发送给客户端。

它也会影响其他文件,尽管很可能只在文件末尾被视为垃圾并被各自的应用程序忽略。