Asp.net 通过会话变量在特定大小上上传文件并获取;无法访问已关闭的文件";错误

Asp.net 通过会话变量在特定大小上上传文件并获取;无法访问已关闭的文件";错误,asp.net,Asp.net,我创建了一个空的ASP.NET应用程序,有两个页面:Default.aspx和Action.aspx(请参见下文)。运行时,我选择一个200k.bmp文件并单击保存。然后,我得到一个“无法访问关闭的文件”错误,但只有当我的源文件超过55k左右。有什么好处?谢谢 Default.aspx Action.aspx 上载的文件不保存在FileUpload控件中,该控件仅引用实际数据所在的响应流 整个响应流直到需要时才被读取,但是如果上传的文件很小,它将被读取到流的缓冲区中。当您执行重定向时,响应流将被

我创建了一个空的ASP.NET应用程序,有两个页面:Default.aspx和Action.aspx(请参见下文)。运行时,我选择一个200k.bmp文件并单击保存。然后,我得到一个“无法访问关闭的文件”错误,但只有当我的源文件超过55k左右。有什么好处?谢谢

Default.aspx Action.aspx
上载的文件不保存在
FileUpload
控件中,该控件仅引用实际数据所在的响应流

整个响应流直到需要时才被读取,但是如果上传的文件很小,它将被读取到流的缓冲区中。当您执行重定向时,响应流将被关闭,因此缓冲区中不存在的任何内容都将无法读取


您必须将上传的文件保存在它到达的页面中,您无法保存
FileUpload
控件以备以后使用,也无法从中可靠地获取文件。

您无法在会话中存储控件。非常感谢您的回复。我的实际场景是在一个页面上,但也有国家/州/城市下拉列表框可以进行回发。例如,考虑用户选择要上载的文件,然后改变进行回发的状态,以重新填充城市下拉列表。在这种情况下,您将丢失FileUpload的值。只是很难,他们需要重新选择吗?再次感谢。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:FileUpload ID="attachmentFileUpload" Width="300px" runat="server" />
    <asp:Button ID="saveButton" runat="server" Text="Save" OnClick="saveButton_Click" />
    </div>
    </form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
    public partial class Simple : System.Web.UI.Page
    {
        protected void saveButton_Click(object sender, EventArgs e)
        {
            Session["AttachmentFileUpload"] = attachmentFileUpload;
            Response.Redirect("Action.aspx");
        }
    }
}
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Action.aspx.cs" Inherits="WebApplication1.Action" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    </div>
    </form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
    public partial class Action : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            FileUpload tempFileUpload = (FileUpload)Session["AttachmentFileUpload"];
            tempFileUpload.PostedFile.SaveAs(@"C:\Temp\MyUpload.bmp");
        }
    }
}