2013-02-08 2 views
0

Я новичок в javascripting, и у меня есть этот кусок кода. В этом коде вы можете выбрать файл, а затем просмотреть его первые байты A-B, байты B-C или весь файл. Демонстрация этого кода: http://www.html5rocks.com/en/tutorials/file/dndfiles/ - tittle: СЛЕЗИ ФАЙЛ.Javascript - разрезать файл - вам нужно изменить javascript

  1. Вопрос: Как установить постоянный файл, который будет использоваться в этом скрипте, вместо возможности загрузки случайного файла? (например, у меня есть файл test.html, и я хочу, чтобы он был единственным файлом, используемым этим скриптом).

  2. Вопрос: Когда я загружаю html-файл, сценарий не показывает частичный СОДЕРЖАНИЕ этого файла, но он показывает часть ИСТОЧНИЧНОГО КОДА этого файла. Например, если загруженный файл содержит тег изображения, в результате я не вижу изображение, а только точно переписанный исходный код. Есть ли способ, как результаты javascript будут действовать как обычная страница, написанная в html?

Может быть, это примитивные вопросы, для кого-то специалисту в данной области, но мое знание программирования заканчивается klowledge языка C и когда я учусь PHP или JavaScript, я просто угадать. Большая часть времени я нахожусь успешным, но не сейчас :(

Thanx для каждого ответа!

<style> 
    #byte_content { 
    margin: 5px 0; 
    max-height: 100px; 
    overflow-y: auto; 
    overflow-x: hidden; 
    } 
    #byte_range { margin-top: 5px; } 
</style> 

<input type="file" id="files" name="file" /> Read bytes: 
<span class="readBytesButtons"> 
    <button data-startbyte="0" data-endbyte="4">1-5</button> 
    <button data-startbyte="5" data-endbyte="14">6-15</button> 
    <button data-startbyte="6" data-endbyte="7">7-8</button> 
    <button>entire file</button> 
</span> 
<div id="byte_range"></div> 
<div id="byte_content"></div> 

<script> 
    function readBlob(opt_startByte, opt_stopByte) { 

    var files = document.getElementById('files').files; 
    if (!files.length) { 
     alert('Please select a file!'); 
     return; 
    } 

    var file = files[0]; 
    var start = parseInt(opt_startByte) || 0; 
    var stop = parseInt(opt_stopByte) || file.size - 1; 

    var reader = new FileReader(); 

    // If we use onloadend, we need to check the readyState. 
    reader.onloadend = function(evt) { 
     if (evt.target.readyState == FileReader.DONE) { // DONE == 2 
     document.getElementById('byte_content').textContent = evt.target.result; 
     document.getElementById('byte_range').textContent = 
      ['Read bytes: ', start + 1, ' - ', stop + 1, 
      ' of ', file.size, ' byte file'].join(''); 
     } 
    }; 

    var blob = file.slice(start, stop + 1); 
    reader.readAsBinaryString(blob); 
    } 

    document.querySelector('.readBytesButtons').addEventListener('click', function(evt) { 
    if (evt.target.tagName.toLowerCase() == 'button') { 
     var startByte = evt.target.getAttribute('data-startbyte'); 
     var endByte = evt.target.getAttribute('data-endbyte'); 
     readBlob(startByte, endByte); 
    } 
    }, false); 
</script> 
+0

вы не можете прочитать файл с диска без взаимодействия с пользователем, даже с новой Api файла, так что невозможно сделать файл «по умолчанию» Выбор –

+0

Если вы защитите файл самостоятельно, то просто Ajax это и показать htmlfragments от него – mplungjan

ответ

1
  1. No. По соображениям безопасности, вы не можете напрямую взаимодействовать с файловой системой без принятия пользователя выбор. Представьте, кто-то делает upload 'known/path/to/passwords'.

  2. Это измотали содержимое и исходный код. файла являются различные идеи. Y ou're уровни смешивания. У документа есть содержимое. И документ может быть представлен исходным кодом в файле. Но вы не загружаете документ. Вы загружаете файл, то есть набор байтов, представляющих этот исходный код. Любая интерпретация этого документа является отдельной работой, которую вам нужно выполнить.

0

Вопрос 1: Как я могу установить постоянный файл, который будет использоваться в этом сценарии, вместо возможности загрузки случайного файла?

Доступ к файлам не поддерживается с компьютера пользователя без его явного «выгрузки». Все остальное будет проблемой безопасности. Однако некоторые «приложения» (расширения браузера и т. Д.) Могут иметь эту привилегию, а в некоторых браузерах вы можете отключить безопасность.

Чтобы загрузить конкретный файл каждый раз, вы должны использовать запрос ajax в Интернете.

Вопрос: Когда я загружаю html-файл, сценарий не показывает частичный СОДЕРЖАНИЕ этого файла, но он показывает часть ИСТОЧНИЧНОГО КОДА этого файла.

Так оно и должно работать. Файл html состоит только из разметки; изображение - это другой файл.

Есть ли способ, каким образом результаты javascript будут действовать как обычная страница, написанная в html?

Конечно, вы можете визуализировать источник HTML, записав его в iframe или что-то в этом роде. Однако он не получит доступ к изображению, являющемуся локальным файлом.

Смежные вопросы