入力ファイルコントロールから特定のファイルを削除する方法はありますか?入力ファイルコントロールから選択した特定のファイルを削除する方法
複数のファイルを選択するオプション付きの入力ファイルコントロールがあります。しかし、私はファイルを検証したいと思うし、それが間違った拡張子を持っている場合は、ファイルコントロール自体からそのファイルを削除する必要がありますか?
は、私は以下のオブジェクトのスクリーンショットですが、私は他の人が指摘したように、それは
入力ファイルコントロールから特定のファイルを削除する方法はありますか?入力ファイルコントロールから選択した特定のファイルを削除する方法
複数のファイルを選択するオプション付きの入力ファイルコントロールがあります。しかし、私はファイルを検証したいと思うし、それが間違った拡張子を持っている場合は、ファイルコントロール自体からそのファイルを削除する必要がありますか?
は、私は以下のオブジェクトのスクリーンショットですが、私は他の人が指摘したように、それは
、FileList
が読み取り専用変更することはできませんよ
<input type="file" name="fileToUpload" id="fileToUpload" multiple/>
<script> $("#fileToUpload")[0].files[0] </script>
次のように試してみました。あなたは別のArray
にこれらのファイルをプッシュすることによってこれを回避することができます。あなたはそのファイルのリストを選んであなたが望むものを何でもすることができます。それらをサーバーにアップロードすることが目標の場合は、FileReader
APIを使用できます。
以下は、FileList
を修正する必要性を完全に回避する方法についてのラウンドです。 手順:
FileReader
APIを希望検証のためのフィルタイベントhandlに有効な、処理されたファイルを提出ERおよび基本的なファイルループコード:以下
var validatedFiles = [];
$("#fileToUpload").on("change", function (event) {
var files = event.originalEvent.target.files;
files.forEach(function (file) {
if (file.name.matches(/something.txt/)) {
validatedFiles.push(file); // Simplest case
} else {
/* do something else */
}
});
});
あなたがブラウザにファイルをロードするためにFileReader
APIを使用して、オプションをBase64として、それをサーバに送信することができます方法を示していたファイルループのより複雑なバージョンです。エンコードされたブロブ。
files.forEach(function (file) {
if (file.name.matches(/something.txt/)) { // You could also do more complicated validation after processing the file client side
var reader = new FileReader();
// Setup listener
reader.onload = (function (processedFile) {
return function (e) {
var fileData = { name : processedFile.name, fileData : e.target.result };
// Submit individual file to server
$.post("/your/url/here", fileData);
// or add to list to submit as group later
validatedFiles.push(fileData);
};
})(file);
// Process file
reader.readAsDataURL(file);
} else {
/* still do something else */
}
});
APIを使用する場合の注意点をご記入ください。FileReader
Base64でファイルをエンコードすると、サイズが約30%増加します。それが受け入れられない場合は、他のものを試す必要があります。
HTML
<input id="fileInput" name="fileInput" type="file" />
<input onclick="clearFileInput()" type="button" value="Clear" />
javascriptの
function clearFileInput(){
var oldInput = document.getElementById("fileInput");
var newInput = document.createElement("input");
newInput.type = "file";
newInput.id = oldInput.id;
newInput.name = oldInput.name;
newInput.className = oldInput.className;
newInput.style.cssText = oldInput.style.cssText;
// copy any other relevant attributes
oldInput.parentNode.replaceChild(newInput, oldInput);
}
悪い考えではありません...私は、 "oldInput'を' newInput'で置き換えて、実際のフォームの送信に使われている実際の 'hiddenInput'を置き換え、' oldInput'をそのままにします。 – skplunkerin
私は(私はここで答えました:JavaScript delete File from FileList to be uploadedを)私はここにもここに私のコメントを追加する必要があることを考えた私は、回避策を見つけた
。これは、リクエストにAJAXを必要とせず、フォームをサーバーに送ることができます。基本的にhidden
またはtext
入力を作成し、選択したファイルを処理した後に作成されるbase64文字列にvalue
属性を設定できます。
<input type=hidden value=${base64string} />
おそらく、代わりに入力text
またはhidden
の複数の入力ファイルを作成するためのアイデアを検討します。これは、値を割り当てることができないため、機能しません。
このメソッドは、データベースに送信されるデータには、入力ファイルが含まれますし、あなたは可能性が、入力ファイルを無視する:バックエンドで
disabled
属性を設定できます。ファイルを削除する場合は、要素のインデックスを取得し、入力要素(テキストまたは非表示)をDOMから削除します。
要件:
change
イベントをトリガするたびに、アレイ内のすべてのファイルを格納するためのロジックを記述する必要があります。長所:
ファイルをどうしますか?一度ユーザーがそれらをアップロードすると、彼らはちょうどあなたのtmpフォルダにコピーされ、彼らの情報はあなたが持っている配列に保持されているので、それらを処理するには間違った拡張子を持つものをスキップしてください... –
人、そのオブジェクトは属性が "0"、 "1"、 "2"なので、ここで配列操作を行うことはできません –
残念ながら、FileList内のファイルは読み取り専用であるため変更できません。新しいFileListを作成することも一見不可能です。入力要素の 'accepts'属性を使用して問題を解決できる可能性がありますか? '$("#fileToUpload ")[0] .value = ''' –