За последние 24 часа нас посетили 18867 программистов и 1641 робот. Сейчас ищут 1725 программистов ...

FileReader

Тема в разделе "JavaScript и AJAX", создана пользователем Slavka, 8 дек 2016.

Метки:
  1. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    имеется класическая читалка файлов
    Код (Javascript):
    1.             function handleFileSelect(evt) {
    2.   var files = evt.target.files; // FileList object
    3. if (!files) {
    4.                     return;
    5.                 }
    6.     // files is a FileList of File objects. List some properties.
    7.     var output = [];
    8.     var f;
    9.     var filename;
    10.     for (var i = 0; f = files[i]; i++) {
    11.           filename = encodeURI(f.name);
    12.           alert (filename);
    13.       output.push('<li><strong>', encodeURI(f.name), '</strong> (', f.type || 'n/a', ') - ',
    14.                   f.size, ' Байт(ов), последнее изменение: ',
    15.                   f.lastModifiedDate.toLocaleDateString(), '</li>');
    16.                   var reader = new FileReader();
    17.                   //alert (filename);
    18.                   reader.onload = function (e)
    19.                   {
    20.                    var header = ";base64,";
    21.                     var fileData = e.target.result;
    22.                         alert (filename);
    23.                     //alert(fileData.substr(fileData.indexOf(header) + header.length));
    24.                     var curr_file = $('div[id^="Files"]:last').prop("id");
    25.                     add_file();
    26.                     $('#'+curr_file+' div[id="file-content"]').text( fileData.substr(fileData.indexOf(header) + header.length));
    27.                     $('#'+curr_file+' div[id="file-name"]').text(filename);
    28.                   }
    29.                 reader.readAsDataURL(f);
    30.            
    31.     }
    32.     document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
    33.   }
    34.   document.getElementById('files').addEventListener('change', handleFileSelect, false);
    35.  

    как в этом куске ( она асинхронная)
    Код (Javascript):
    1. reader.onload = function (e)
    2.                   {
    3.                    var header = ";base64,";
    4.                     var fileData = e.target.result;
    5.                         alert (filename);
    6.                     //alert(fileData.substr(fileData.indexOf(header) + header.length));
    7.                     var curr_file = $('div[id^="Files"]:last').prop("id");
    8.                     add_file();
    9.                     $('#'+curr_file+' div[id="file-content"]').text( fileData.substr(fileData.indexOf(header) + header.length));
    10.                     $('#'+curr_file+' div[id="file-name"]').text(filename);
    11.                   }
    поиметь любую переменную с внешнего мира - например имя файла

    я пробовал изменять входные параметры функции.. но ничего не выходит - мне надо задать или номер файла .. или имя - да хоть чтонить - как идентифицировать это чудо
     
  2. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    никто занимался таким ? я все еще ломаю башку - даже в нете ниче путем нету - есть функция - но она работает по 1 файлу .. у меня же несколько и тут она не пашет =(
    выдает тупо толи первый толи последний файл - ну что последнее было в переменной то она и отдает скорей всего..
    че за бред то такой - читать файл можно .. а шагнуть в право в лево нельзя.. или можно но я не понимаю как - даже обертка then тут ничего не даст - входных параметров нету
     
  3. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    УРААААА
    нашел решение в инете - спасибо умным людям
    Код (Javascript):
    1. var reader = new FileReader();
    2. reader.onload = (function(theFile){
    3.     var fileName = theFile.name;
    4.     return function(e){
    5.         console.log(fileName);
    6.         console.log(e.target.result);
    7.     };
    8. })(currFile);  
    9. reader.readAsText(currFile);
    когданить мои мозги начнут мыслить в ассинхроне .. не не сегодня =)
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    понять бы ещё, что ты хотел :D
    хорошо, что всё получилось
     
  5. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    попробую расказать
    FileReader по функционалу - имеет только 1 входной параметр - путь к файлу и онфункция загрузки файлов работает в ассинхронном режиме в итоге если делаешь загрузку файлов им - то необходимо как то идентифицировать файл - ну имя дать ... а как это сделать когда файлы грузятся не потому порядку какой заложил а кто быстрее тот и загрузился.
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    так они же сообщают свою имя, когда прилетают на сервер.
     
  7. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    в моем случае до сервера дело не доходит - чистый html + javascript
    а зачадчка простая - подписать с помошью web криптоарма файл =)
    а это делается на клиенте..
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а, сорь, с другой темой попутал.