Przekazywanie ścieżki do przesłanego pliku z przeciągnij i upuść HTML5 do pola wprowadzania

Pracuję nad aplikacją (w Node.js, która nie ma znaczenia w tym przypadku), która pozwala użytkownikowi przesłać obraz. Działa dobrze, używając formularza z polem input (type = "file").

Chcę jednak móc przesłać obraz za pomocą przeciągania i upuszczania HTML5. O ile mi wiadomo, możliwe jest przeciągnięcie obrazu do klienta, a miniaturka obrazu jest wyświetlana w div. Jednak naprawdę potrzebuję pomocy w uruchomieniu przesyłania plików.

Chodzi o to, że chcę użyć formularza, którego teraz używam, i (w jakiś sposób) przekazać ścieżkę pliku do pola wejściowego, tzn. Przepływ będzie działał dokładnie tak, jak teraz, ale zamiast wybierać plik przez przeglądanie chcę dołączyć go do pola wprowadzania, przeciągając i upuszczając.

W poniższym kodzie js do przeciągania i upuszczania plik, który został przeciągnięty do klienta, jest przechowywany w zmiennej „plik” i jestem w stanie użyć „nazwa pliku”, „typ pliku” i „rozmiar pliku” dokładnie w ten sam sposób, w jaki działa od dawna z formularzem. Nie mogę jednak uzyskać dostępu do plików „ścieżka” (file.path), co uniemożliwia dostęp do strony serwera plików w celu przesłania w taki sam sposób, jak robię to wcześniej.

Pytanie brzmi, czy możliwe jest przekazanie obiektu pliku do pola wejściowego po przeciągnięciu pliku do klienta, tak że mogę kliknąć „wyślij” i przesłać plik? Jeśli tak, jak można to zrobić?

Z góry dziękuję!

Dropbox oraz formularz, którego używam do przesyłania plików:

<code><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>
</code>

kod do przeciągania i upuszczania:

<code>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;
    };
},
</code>

questionAnswers(2)

yourAnswerToTheQuestion