2

ユーザーが特定のページにアップロードできるファイルのサイズを制限しようとしています。私はこれをweb.config次のように使用して行いました:

<location path="SubSection/TestPage">
    <system.web>
        <httpRuntime maxRequestLength="2048" />
    </system.web>
</location>

ただし、このエラーが発生すると、ユーザーは ASP.NET のイエロー エラー ページのいずれかに移動します。カスタム エラー ページを作成できることがわかったので調べてみましたが、それでもブラウザのリダイレクトが必要です。

これは、ユーザーが現在表示しているページから移動せずに、大きすぎるファイルをアップロードしようとしていることをユーザーに知らせるためのものです。この TestPage が黄色のエラー ページにリダイレクトされるのを防ぎ、代わりに何らかの JavaScript ポップアップを表示することはできますか?

Application_Error()ファイル内のメソッドでエラーを処理しようとしましたglobal.asaxが、残念ながら、このメソッドで何をしても、このメソッドが終了すると常にリダイレクトされるようです。このページから JavaScript ポップアップを表示しようとしても成功しませんでしたが、これはファイルで実際に可能であると理解しているglobal.asaxため、単純に何か間違ったことをしていると思います。

これは、ここApplication_Error()から受け入れられた回答に基づいて、 thisに基づく JavaScript 部分を使用して、処理するための私のコードです。

void Application_Error(object sender, EventArgs e) 
{
    int TimedOutExceptionCode = -2147467259;
    Exception mainEx;
    Exception lastEx = Server.GetLastError();
    HttpUnhandledException unhandledEx = lastEx as HttpUnhandledException;

    if (unhandledEx != null && unhandledEx.ErrorCode == TimedOutExceptionCode)
    {
        mainEx = unhandledEx.InnerException;
    }
    else
        mainEx = lastEx;

    HttpException httpEx = mainEx as HttpException;

    if (httpEx != null && httpEx.ErrorCode == TimedOutExceptionCode)
    {
        if(httpEx.StackTrace.Contains("GetEntireRawContent"))
        {
            System.Web.UI.Page myPage = (System.Web.UI.Page)HttpContext.Current.Handler;
            myPage.RegisterStartupScript("alert","<script language=javascript>alert('The file you attempted to upload was too large.  Please try another.');</script" + ">");
            Server.ClearError();
        }
    }
}

最後に、 thisVB.NETからの受け入れられた回答に基づいて、ユーザー コントロール自体 ( にあります) で次のコードも試しました。

    Private Sub Page_Error(ByVal sender As Object, ByVal e As EventArgs)
        Dim err As Exception = Server.GetLastError()
        Dim cs As ClientScriptManager = Page.ClientScript
        If (cs.IsStartupScriptRegistered(Me.GetType(), "testJS") = False)
            Dim cstext1 As String = "alert('" & err.Message & "');"
            cs.RegisterStartupScript(Me.GetType(), "testJS", cstext1, True)
        End If
    End Sub

残念ながら、このコードはまったく呼び出されていないようです。

繰り返しますが、これは、たとえば、ユーザーが少し大きすぎるファイルをアップロードする際の単純なミスを処理するためのものです。リダイレクトして、ユーザーが元のページで行った可能性のある他の操作を失いたくありません。単純な JavaScript 警告ボックスを表示したいだけです。これはできますか?

4

2 に答える 2

0

次のようなJavaスクリプトでファイルサイズを取得できます。

var fileSize = document.getElementById("myfileUploader").files[0].size; //gives size in bytes.

if(fileSize > 2097152)   //2038Kb = 2038*1024 bytes
{
 alert("File size exceded");
return false;
}
于 2013-09-09T11:51:10.820 に答える
0

AJAX を使用して要求を送信し、ファイルが大きすぎることを示すエラー応答を処理できます。たとえば、jQuery を使用すると、次のようになります。

$.ajax("/my/upload/action",
    {
        type: "POST",
        data-type: "xml",
        data: serializeFilesAsXML();
        success: function() {
            alert("Your files were uploaded!");
        }
        error: function(jqXHR, textStatus, errorThrown) {
            if(errorThrown == "Files Too Large") {
                alert("Your files were too large.");
            } else {
                alert("There was an error uploading your files. Please try again.");
            }
        }
    }
);

ファイルをアップロードするためのアクションを書き直して、AJAX 要求に応答し、適切な失敗メッセージを送信できるようにする必要がある場合があります。

于 2013-11-12T03:24:09.700 に答える