4

ここでは、ボタンをクリックするだけでhtml/htmファイルをアップロードしようとしています。そのために、「input type =file」を使用しています。「accept」属性を設定して、次のようなhtml/htm拡張子のみを受け入れます。

<input type="file" name="htmla" id="htmla" accept="text/html" />

しかし、それは異なるブラウザで異なる動作を示しています

Firefoxでは、すべてのファイルを受け入れています

Chromeでは、画像だけでなくHTMLも受け入れます

IEでは、Firefoxと同じです

javascriptやjqueryなどの方法でhtml/htmファイルのみを受け入れるようにする方法はありますか?

注:MVC4でこのコントロールを使用しています

4

3 に答える 3

3

これは HTML5 固有の属性です。まだすべてのブラウザがサポートしているわけではありません。そうでないものについては、サーバーでチェックを実行する必要があります。もう 1 つの可能性は、javascript を使用して選択されたファイルの拡張子を確認することです。基本的に、次のように選択したファイル名を取得できます$('#htmla').val()。そして、拡張子の正規表現。

于 2013-03-15T07:14:46.233 に答える
2

標準入力制御では、それを達成できるものは何もありません。

はい"accept"、ファイル入力コントロールには属性があり、必要なファイルの種類を指定できますが、これは多くのブラウザーでは認識されません。したがって、JavascriptまたはJqueryを使用して、ユーザーが選択したファイルのファイル名(拡張子)を確認するのが最善です。

function ValidateFile() {
        var fileName = document.getElementById("inputFileId").value
        if (fileName == "") {
            alert("upload a valid File with .htm extension");
            return false;
        }
        else if (fileName.split(".")[1].toUpperCase() == "HTM")
            return true;
        else {
            alert("Invalid File");
            return false;
        }
        return true;
    }

.htmlただし、ユーザーが実行可能ファイルの名前をたとえばに変更することを妨げるものは何もありません。

于 2013-03-15T07:20:30.983 に答える
1
<script>
  function test(obj,filter){

    var file = obj.value.match(/[^\/\\]+$/gi)[0];
    var rx = new RegExp('\\.(' + (filter?filter:'') + ')$','gi');
    if(filter&&file&&!file.match(rx)){
      alert("check the file type, only html is accepted");
      //input file
      //it's totally a bad idea...
      //document.body.innerHTML = "<input type='file' onchange=\"test(this,'html');\" >";

    }
  }
</script>
<body>
    <input id="inputFile" type="file" onchange="test(this,'html');">
</body>

多分これはあなたのためにあるべきですswfupload

于 2013-03-15T07:17:10.843 に答える