Проверка и загрузка текстового файла на стороне клиента

Я пытаюсь загрузить файл в браузер и получить к нему доступ с помощью JavaScript. Это возможно? Я осмотрелся, и кажется, что вы можете сделать это с помощью вспышки. Я пытался узнать, существует ли решение для HTML5/чистого JavaScript.

Я пытаюсь загрузить файл CSV (каждая строка содержит возможную запись в базе данных) и проверить его на лету с помощью javascript. Если он пройдет проверку, я отправлю POST на сервер для создания элементов.


person Mark    schedule 06.05.2012    source источник


Ответы (1)


Это возможно. MDN предлагает подробное объяснение этого.

Ниже приведен базовый метод чтения текстового файла с помощью API FileReader:
http://jsfiddle.net/tGpDG/

<input type="file" id="file_upload">
<script>
var input_file = document.getElementById('file_upload');
input_file.onchange = function() {
    var file = this.files[0];
    // Do something with the FileReader object
    var reader = new FileReader();  
    reader.onload = function(ev) {
        // Show content  (ev.target === reader)
        alert(ev.target.result);
    };
    // Read as plain text
    reader.readAsText(file);  
};
</script>
person Rob W    schedule 06.05.2012
comment
что, если я хочу прочитать файл и выдать исключение, если содержимое не соответствует действительности? все это обряд асинхронных вызовов? Короче говоря, как вызвать исключение из функции для reader.onload? - person dev2d; 18.06.2013
comment
в приведенном выше случае, как этот пользователь выдаст ошибку/исключение, если его csv неправильный? - person dev2d; 18.06.2013
comment
@VJD Поскольку код асинхронный, вы не можете прервать выполнение вызывающего объекта с помощью броска. Если вы хорошо структурировали свой код, либо используйте два обратных вызова (один для успеха, один для отказа), либо используйте несколько аргументов для успеха/неудачи, например. function callback(result, error) { if (error) .... }. Если вам не нравятся длинные цепочки обратных вызовов в вашем коде, поищите промисы. - person Rob W; 18.06.2013