2

ページに asp ファイルアップロード コントロールがあります。クライアント側で選択したファイルを検証する方法。検証規則: 1. ファイルは jpeg、png、bmp、または gif でなければなりません。2. ファイル サイズは 25 kb および 2 mb 以内である必要があります。助けてください。ありがとう。
拡張機能を検証するために次のコードを試しました

<asp:FileUpload ID="FileUpload2" runat="server"/>                    
<asp:CustomValidator ID="CustomValidator1" runat="server" ClientValidationFunction="ValidateFileUpload" ErrorMessage="Invalid file type. Only .gif, .jpg, .png, .bmp and .jpeg are allowed." ControlToValidate="FileUpload2" ValidationGroup="update">&nbsp;</asp:CustomValidator>
<script language="javascript" type="text/javascript">
    function ValidateFileUpload(Source, args) {
        var fuData = document.getElementById('<%= fuData.ClientID %>');
        var FileUploadPath = fuData.value;

        if (FileUploadPath == '') {
            // There is no file selected
            args.IsValid = false;
        }
        else {
            var Extension = FileUploadPath.substring(FileUploadPath.lastIndexOf('.') + 1).toLowerCase();

            if (Extension == "jpg" || Extension == "jpeg" || Extension == "png" || Extension == "gif" || Extension == "bmp") {
                args.IsValid = true; // Valid file type
            }
            else {
                args.IsValid = false; // Not valid file type
            }
        }
    }
</script>
4

3 に答える 3

6

クライアント側スクリプトを介してファイル入力要素で選択されたファイルのサイズを決定することはできません。ファイルのサイズを決定するには、ファイルへの読み取りアクセス権が必要です。ご想像のとおり、JavaScript にコンピューター上のファイルの読み取りを許可することは、「本当に悪い考え」です。™

この種の質問をよく見かけますが、ファイル入力要素が実際に何をするかについて混乱があると思います。ユーザーがファイルを選択すると、ファイルのバイトはこの要素に「ロード」されず、読み取り可能になります。むしろ、入力はファイルの場所への参照を指定するため、ブラウザーは、フォームが投稿されたときに、ファイルをエンコードして POST で送信することを認識します。このプロセスはブラウザーの内部にあり、スクリプトで利用できるようにクライアントに公開されることはありません。

ファイル サイズの検証を行う必要がある場合は、実際のファイル バイトにアクセスできるサーバーで行う必要があります。非常に大きなファイルでサイトを「フラッディング」する人が心配な場合は、IIS インスタンスを構成することで、最大許容 POST サイズを指定できます。

于 2012-04-06T17:36:13.470 に答える
2

ajax コントロール ツール キットを試すことができます。ファイルのアップロードを独自に制御できます。そのはるかにクール

于 2012-04-07T12:25:54.560 に答える
0

現在使用されているほとんどのブラウザーでは、ファイル サイズに関するクライアント側の検証を行うことができます: https://stackoverflow.com/a/1832497/2705769

于 2016-02-10T10:36:25.020 に答える