42

シンプルな HTML アップロード フォームがあり、デフォルトの拡張子 ("*.drp" など) を指定したいと考えています。これを行う方法は入力タグの ACCEPT 属性を使用することだと読みましたが、正確な方法はわかりません。

<form enctype="multipart/form-data" action="uploader.php" method="POST">
Upload DRP File:
<input name="Upload Saved Replay" type="file" accept="*.drp"/><br />
<input type="submit" value="Upload File" />
</form>

編集 javascriptを使用して検証が可能であることは知っていますが、ユーザーがポップアップダイアログに「.drp」ファイルのみを表示するようにしたいと思います。また、このアプリケーションのサーバー側の検証についてはあまり気にしません。

4

7 に答える 7

37

あなたの「.drp」のような特定のフォーマットの場合。それをaccept=".drp"で直接渡すことができます。

ただし、「*」なし

<input name="Upload Saved Replay" type="file" accept=".drp" />
<br/>

于 2013-06-11T10:44:21.657 に答える
27

ファイルの拡張子を確認するためにjavascriptを使用しています。これが私のコードです:

HTML

<input name="fileToUpload" type="file" onchange="check_file()" >

.. ..

JavaScript

function check_file(){
                str=document.getElementById('fileToUpload').value.toUpperCase();
        suffix=".JPG";
        suffix2=".JPEG";
        if(str.indexOf(suffix, str.length - suffix.length) == -1||
                       str.indexOf(suffix2, str.length - suffix2.length) == -1){
        alert('File type not allowed,\nAllowed file: *.jpg,*.jpeg');
            document.getElementById('fileToUpload').value='';
        }
    }
于 2011-07-22T10:21:25.007 に答える
10

accept 属性は、ファイル マスクではなく、MIME タイプを想定しています。たとえば、PNG 画像を受け入れるには、accept="image/png" が必要です。ブラウザがファイル タイプと見なす MIME タイプを調べて、それに応じて使用する必要がある場合があります。ただし、「drp」ファイルは標準ではないように見えるため、一般的な MIME タイプを受け入れる必要がある場合があります。

さらに、ほとんどのブラウザーはこの属性を尊重しないようです。

ファイルのアップロードをフィルタリングするより良い方法は、サーバー側で行うことです。たまにファイルをアップロードして、間違ったファイルを選択したことを知るだけのユーザーが時間を無駄にする可能性があるため、これは不便ですが、少なくとも何らかの形でデータの整合性を保つことができます。

あるいは、フォームが送信される前に JavaScript でクイック チェックを行うことを選択することもできます。ファイルフィールドの値の拡張子をチェックして、それが「.drp」であるかどうかを確認してください。これはおそらく、accept 属性よりもはるかにサポートされるでしょう。

于 2008-10-31T16:53:29.227 に答える
1

CMS が指摘しているように、ほとんどのブラウザーはこの属性を無視するため、私はこの属性を使用しません。

必ずクライアント側の検証を使用しますが、サーバー側と組み合わせてのみ使用してください。クライアント側の検証はすべて回避できます。

トピックから少し外れますが、アップロードされたファイルを検証するためにコンテンツ タイプをチェックする人もいます。攻撃者はこれを簡単に変更して、たとえば php ファイルをアップロードできるため、注意が必要です。次の例を参照してください: http://www.scanit.be/uploads/php-file-upload.pdf

于 2008-10-31T17:14:42.057 に答える
1

JavaScriptを使用して実行できます。送信関数でフォーム フィールドの値を取得し、拡張子を解析します。

次のようなものから始めることができます。

<form name="someform"enctype="multipart/form-data" action="uploader.php" method="POST">
<input type=file name="file1" />
<input type=button onclick="val()" value="xxxx" />
</form>
<script>
function val() {
    alert(document.someform.file1.value)
}
</script>

私はalexmacに同意します-サーバー側でも行います。

于 2008-10-31T16:56:43.527 に答える
0

accept 属性は、フォームのターゲットが正しく処理するコンテンツ タイプ (MIME タイプ) のコンマ区切りリストを指定します。残念ながら、この属性はすべての主要なブラウザーで無視されるため、ブラウザーのファイル ダイアログにはまったく影響しません。

于 2008-10-31T16:56:36.383 に答える
-2

数行の別のソリューション

function checkFile(i){
  i = i.substr(i.length - 4, i.length).toLowerCase();
  i = i.replace('.','');
  switch(i){
    case 'jpg':
    case 'jpeg':
    case 'png':
    case 'gif':
      // do OK stuff
      break;
    default:
      // do error stuff
      break;
  }
}
于 2013-05-31T13:16:22.877 に答える