私は、ユーザーが画像をアップロードできるようにするアプリケーション(Node.jsで、この場合は関係ありません)に取り組んでいます。input(type = "file")フィールドを持つフォームを使用すると正常に機能します。
ただし、代わりにHTML5のドラッグアンドドロップを使用して画像をアップロードできるようにする必要があります。私が来た限り、画像をクライアントにドラッグすることは可能であり、画像のサムネイルはdivに表示されます。ただし、ファイルのアップロードを機能させるには、本当に助けが必要です。
問題は、現在使用しているフォームを使用し、(どういうわけか)ファイルのパスを入力フィールドに渡すことです。つまり、フローは現在とまったく同じように機能しますが、参照してファイルを選択する代わりにドラッグアンドドロップで入力フィールドに添付したい。
以下のドラッグアンドドロップ用のjsコードでは、クライアントにドラッグされたファイルは変数「file」に格納されており、「file.name」、「file.type」、「file.size」を使用できます。以前からフォームを使用した場合とまったく同じように機能します。ただし、ファイルの「パス」(file.path)にアクセスできないため、以前と同じようにファイルサーバー側にアクセスしてアップロードすることができません。
問題は、ファイルがクライアントにドラッグされた後にファイルオブジェクトを入力フィールドに渡して、[送信]をクリックしてファイルをアップロードできるようにすることは可能ですか?もしそうなら、これはどのように行うことができますか?
前もって感謝します!
ドロップボックスと、ファイルのアップロードに使用しているフォーム:
<div id='upload'>
<article>
<div id='holder'>
<p id='status'>File API and FileReader API not supported</p>
</div>
</article>
<form method='post' enctype='multipart/form-data' action='/file-upload'>
<p>
<input type='file' name='thumbnail'>
</p>
<p>
<input type='submit'>
</p>
</form>
</div>
ドラッグアンドドロップのコード:
uploadImage: function(){
var holder = document.getElementById('holder'),
state = document.getElementById('status');
if (typeof window.FileReader === 'undefined') {
state.className = 'fail';
} else {
state.className = 'success';
state.innerHTML = 'File API & FileReader available';
}
holder.ondragover = function () { this.className = 'hover'; return false; };
holder.ondragend = function () { this.className = ''; return false; };
holder.ondrop = function (e) {
this.className = '';
e.preventDefault();
var file = e.dataTransfer.files[0],
reader = new FileReader();
reader.onload = function (event) {
holder.style.background = 'url(' + event.target.result + ') no-repeat center';
};
reader.readAsDataURL(file);
return false;
};
},