0

Default.aspx と Action.aspx の 2 つのページを持つ空の ASP.NET アプリを作成しました (以下を参照してください)。実行中は、200k の .bmp ファイルを選択し、クリックして保存します。その後、「閉じたファイルにアクセスできません」というエラーが表示されますが、ソース ファイルが 55k 程度を超える場合のみです。何を与える?ありがとう

デフォルト.aspx

<%@ 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>

Default.aspx.cs

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

アクション.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>

アクション.aspx.cs

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");
        }
    }
}
4

1 に答える 1

0

アップロードされたファイルはFileUploadコントロール内に保持されません。コントロールには、実際のデータがある応答ストリームへの参照のみがあります。

応答ストリーム全体は、必要になるまで読み取られませんが、アップロードされたファイルが小さい場合は、ストリームのバッファーに読み取られます。リダイレクトを行うと、応答ストリームが閉じられるため、まだバッファーにないものは読み取ることができません。

アップロードされたファイルを到着したページに保存する必要がありますFileUpload。後でコントロールを保存して、そこからファイルを確実に取得することはできません。

于 2013-03-06T01:31:02.717 に答える