asp.net - 从 ASP .Net 下载文件时,文本文件会附加 HTML 内容

标签 asp.net vb.net text-files uploading download

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

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

效果很好,我能够看到文件正在上传,并且文件的内容完好无损(恰好是用户上传的文件的重复副本)。

现在,为了将文件下载回用户(稍后),我编写了另一个页面,该页面从 Request.Parameter("file")读取文件名并获取要下载给用户的文件。我已经编写了 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>

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

这是我上传的示例文件 Original File before uploading

Here is my sample text file

It consists of 3 lines only

这是我下载回来时的文件 The same file when downloaded from the server

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>

我转到服务器上的文件并打开它以确保附加的 HTML 内容存在,但正如我所说,文件已完美上传。仅当下载时,它才包含附加的 HTML 内容。

我到底做错了什么?我该怎么做才能让这些额外的 HTML 代码消失? 为什么这个问题只影响文本文件,而不影响图像、EXE、XLS、DOC 等?

最佳答案

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

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

关于asp.net - 从 ASP .Net 下载文件时,文本文件会附加 HTML 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11590483/

相关文章:

c# - 在 SQL Server 或 C# 中创建一个 "dbf"文件

vb.net - 带 Nothing 检查的变量声明

python - 如何读取和搜索多个文本文件,以便存储与我的搜索匹配的文件列表?

asp.net - 如何在MVC 4中查询当前登录用户的AD信息

c# - 在 ASP.NET MVC5 中求解二次方程

c# - 使用C#生成正态分布图

java - 从文件读取的数据在冒泡排序方法中不起作用

c# - 下拉菜单中的回发或回调参数无效

vb.net - 我们可以在函数 vb.net 中返回两个变量值吗?

java - 如何让我的 java 程序从文本文件中读取日语(Unicode 编码)?