0

AsyncFileUploadコントロールを備えたファイルアップロードページがあります。ユーザーがファイルを参照すると、アップロードコントロールがファイルをメモリにプルします。次に、ファイルをデータベースに保存するために次のコードを起動する[アップロード]ボタンがあります。

ファイルが約500KBを超える場合、コントロールのFileBytesプロパティは単にnullを返すことがわかりました。これは私のサーバーで発生しますが、アプリをローカルで実行すると正常に実行されます。

ファイルをデータベースにコミットする前にユーザーが詳細情報を入力する必要があるため、OnUploadCompletedイベントを処理していません。

これはweb.configにあります:httpRuntime maxRequestLength = "10000" />

private void UploadDocument(int mietID)
{
    if (Page.IsValid)
    {
        if (mietID > 0)
        {
            if (File1.HasFile && File1.FileBytes != null)
            {
                string[] docFormats = MIETPConfig.Current.SupportedDocumentFormats;

                for (short i = 0; i < docFormats.Length; i++)
                    docFormats[i] = docFormats[i].ToUpper();

                if (docFormats.Contains(Path.GetExtension(File1.FileName).ToUpper()))
                {
                    try
                    {
                        byte[] uploadedBytes = File1.FileBytes;
                        DocumentController.CreateDocument(txtLinkText.Text, Path.GetFileName(File1.PostedFile.FileName), uploadedBytes, mietID, (User)Session["User"]);

                        MietpClientScripts.CloseWindow(Page);
                    }
                    catch (Exception)
                    {
                        lblUploadStatus.Text = "There was an error saving the document to the database.";
                    }
                }
                else
                {
                    System.Text.StringBuilder sb = new System.Text.StringBuilder();
                    foreach (string s in docFormats)
                        sb.Append(s + ", ");

                    sb.Remove(sb.Length - 2, 2);
                    lblUploadStatus.Text = "Invalid file format, only these formats are supported: " + sb.ToString();
                }
            }
            else
            {
                lblUploadStatus.Text = "There was an error saving the document, the document could not be read; it might be too large to upload.";
            }
        }
        else
            lblUploadStatus.Text = "No Mietp ID to associate document with.";
    }
}
4

3 に答える 3

2

この問題の修正を見つけたと思います。OnUploadComplete イベントで、FileBytes をセッションに入れて、Button_Click イベントで取得します。何らかの理由で、アップロードされたファイルのバイトは、2 回目のポストバック後にセッションから消去されます...

これは私にとってはうまくいきます。乾杯ローラン

于 2010-02-08T18:37:31.233 に答える
2

使用するときは、ページまたはマスターページに配置されているタグに適切なパラメーターをAsyncFileUpload設定する必要があります。form

 <form id="form1" runat="server" enctype="multipart/form-data" method="post">

適切な enctype とメソッドUploadedComplete を設定しないと、決して起動せず、 FileUpload.HasFileは UploadedComplete の実行中にのみ true を返すため、FileUpload.FileBytesを取得できません。

あなたのページで正しいenctypeを設定していないと思います。

さらに、以前のバージョンの AsyncFileUpload は Chrome では動作しませんでした。2011年7月版(4.1.50731.0)で問題が解決しました。

于 2011-10-06T14:20:53.587 に答える
2

FileBytes完全にはわかりませんが、多くのファイルをアップロードすると大量の RAM が消費されるため、最大バイト数が制限されていると想像できます。ホスティング パートナーがこれを制限している可能性があります。おそらく、ホスティング会社が<httpRuntime maxRequestLength="XXX" />デフォルトで 512 KB に設定しています。

を使用してファイルを保存してみてくださいSaveAs(path)。これは基本的にこの時点で行っていることですが、ファイル全体をメモリに取り込むことを避けてファイルにフラッシュするタイミングをコントロールに判断FileContentさせるか、生のコンテンツへのアクセスが本当に必要な場合はを使用してファイルストリームを取得します。また、ホスティング会社のデフォルト設定を上書きする<httpRuntime maxRequestLength="XXX" />ようなものに変更します。102400

于 2010-01-25T16:35:11.893 に答える