html5 получить путь к файлу - PullRequest
       2

html5 получить путь к файлу

0 голосов
/ 16 февраля 2012

Используя html5 javascript, как вы получаете путь к файлу, когда пользователь выбирает файл? Мне нужен путь к файлу, чтобы использовать в этом примере:

Пользователь загружает файл, приостанавливает его (я знаю, что пока я думаю, что только Mozilla может сделать это), а затем закрывает браузер и планирует возобновить файл на следующий день. Мне нужно знать путь к файлу для этого файла ..

Ответы [ 3 ]

8 голосов
/ 16 февраля 2012

Даже если у вас был путь (некоторые браузеры использовали его для вас), невозможно указать путь для ввода файла типа.

Следовательно, невозможно делать то, что вы хотите, с простым JS и DOM.

Я сказал, что это невозможно, но теперь, когда вы спросили, я думаю, что есть способ с новым File API. Следующие шаги описывают, что нужно сделать, но никоим образом не были протестированы, и я не ожидаю, что это сработает, это просто для того, чтобы показать вам путь, также глобальные переменные плохие, это просто самый простой способ показать , Вот хорошая страница с примерами использования File API http://www.html5rocks.com/en/tutorials/file/dndfiles/

Сначала Вам необходимо ввести тип файла, затем вы можете использовать его, как только пользователь выберет файл, вам будет предоставлен доступ к объекту File. http://dev.w3.org/2006/webapi/FileAPI/#dfn-filereader

<input type="file" id="files" name="files[]" multiple />
<script>
  var fileBlobs = [];
  function handleFileSelect(evt) {
    var files = evt.target.files; // FileList object

    // files is a FileList of File objects. You may now read their contents
    var reader = new FileReader();
    for (var i = 0, f; f = files[i]; i++) {
      fileBlobs.push(reader.readAsBinaryString(f));
    }
  }    
  document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>

Второй Теперь у вас есть содержимое в виде двоичной строки. Вы можете использовать File API для локального хранения файла таким образом, чтобы вы могли получить к нему доступ позже, используя интерфейсы FileWriter и FileSaver http://dev.w3.org/2009/dap/file-system/file-writer.html

var bb = new BlobBuilder();
bb.appendfileBlobs.(fileBlobs[0]);
window.saveAs(bb.getBlob(), "test_file");

Третий Вам нужно сделать Ajax-запрос, передавая этот BLOB-объект на сервер, отслеживая, какая часть загрузки завершена. http://www.w3.org/TR/XMLHttpRequest/#the-upload-attribute. Не похоже, что отслеживание прогресса может быть выполнено на клиенте. Возможно, вам придется опросить сервер для фактического прогресса. Возможное решение, чтобы узнать, где начать прерванную загрузку, состоит в том, чтобы иметь идентификаторы загрузки, и когда вы перезапускаете загрузку, вы спрашиваете сервер, какая часть файла была загружена.

Извините, я не могу дать полный ответ, но это не простая проблема. Шаги, которые я вам сделал, должны привести вас в правильном направлении.

0 голосов
/ 16 февраля 2012

Насколько я знаю, это невозможно, поскольку Javascript имеет доступ только к файлам, которые были переданы ему через ввод или file или перетаскивание.

0 голосов
/ 16 февраля 2012

Так же, как вы не можете отправить HTTP-запрос по частям в течение нескольких дней, вы не можете сделать это и с загрузкой файлов. Протокол просто не позволит этого. Следовательно, все усилия бесполезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...