файлы не загружаются в текстовую область HTML - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь загрузить 3 файла из каталога file/JOHN, где файлы уже присутствуют.

Файлы в следующем формате.Допустим, они находятся в следующем месте (внутри папки file/JOHN): C:/john/file/JOHN/

file1_1555077233.csv
file2_1555077233.csv 
file3_1555077233.csv

Поскольку я тестирую его на своем компьютере с Windows, он находится в этом месте C:/john/file/JOHN/.Однако в конечном итоге на сервере RHEL это будет выглядеть примерно так: /srv/users/JOHN/, поэтому я использую каталог пользователя на компьютере Windows для целей тестирования.

Файлы не отображаются в текстовой области.Тем не менее, текстовая область отображается через 1 секунду, как только я нажимаю кнопку. Что я делаю не так?

Ниже кода отображается текстовая область через 1 секунду после нажатия кнопки Download File.

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8"/>
    <title>LoadFiles</title>
    <link rel="stylesheet" href="built/style.css"/>
    <script type="text/javascript">
        var interval;
        function loadFiles() {
            interval = setInterval(displayTextArea, 1000);


        }
        function displayTextArea() {
              console.log(new Date() + " ");

              document.getElementById("downloadtextArea").innerHTML =
                 '<textarea maxlength="500" cols="30" rows="5"></textarea>'; 


                const requests = [
                  'file1_1555077233.csv',
                  'file2_1555077233.csv ',
                  'file3_1555077233.csv'
                ].map(file => {

                 return fetch('file:///C:/john/file/JOHN/' + file)
                    .then(response => response.text())
                    .catch(console.error)
                })

                Promise.all(requests)
                  .then(contents => contents.join('\n'))
                  .then(content => {

                    //container.innerHTML = `<textarea>${content}</textarea>`
                    content.innerHTML = `<textarea>${content}</textarea>`
                  })


                clearInterval(interval);




            }






    </script>
</head>
<body>


<button id="downloadFileButton" onclick="loadFiles()">Download File</button>
<div id ="downloadtextArea"></div>


</body>
</html>

Устранение неполадок Шаг I выполнен:

Скопировал следующий путь в браузер:

file:///C:/john/file/JOHN/file1_1555077233.csv и я увидел файл

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Причина, по которой текстовая область отображается через 1 секунду, заключается в том, что вы установили интервал в 1 секунду в методе loadfiles().

Можете ли вы указать, какая ошибка отображается в консоли после нажатиякнопка Скачать?Это ниже ошибки?Fetch API не может загрузить file:///C:/john/file/JOHN/file1_1555077233.csv.Схема URL должна быть «http» или «https» для запроса CORS.

0 голосов
/ 15 апреля 2019

Вы пытаетесь установить innerHTML в своих данных ответа, а не в элементе DOM.

В вашей функции displayTextArea():

function displayTextArea() {
  console.log(new Date() + " ");
  const requests = [
    'file1_1555077233.csv',
    'file2_1555077233.csv ',
    'file3_1555077233.csv'
  ].map(file => {
    return fetch('file:///C:/john/file/JOHN/' + file)
    .then(response => response.text())
    .catch(console.error)
  })

  Promise.all(requests)
  .then(contents => contents.join('\n'))
  .then(content => {
    document.getElementById('downloadtextArea').innerHTML = `<textarea>${content}</textarea>`
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...