Как мы можем узнать содержимое файла из объекта Javascript File? - PullRequest
0 голосов
/ 02 ноября 2018

Один из распространенных способов асинхронной загрузки файлов, который я могу найти в Интернете, работает следующим образом:

myUpload(ev) {
  ev.preventDefault();

  const data = new FormData();
  data.append('file', this.uploadInput.files[0]);

  /* Do the upload with something like axios */ 
  axios.post('http://localhost:8000/upload', data)
    . ...
}

Я не могу объяснить следующее:

  • объект this.uploadInput.files[0] является File объектом javascript.
  • Из документации, которую я смог найти (см., Например, this ), и из журнала, который я пробовал на консоли, javascript объекты File не хранят ни содержимое файла, ни путь к файлу.

Следовательно, как объект FormData может получить данные файла, которые мы хотим отправить?

1 Ответ

0 голосов
/ 02 ноября 2018

FormData, вероятно, нет, но браузер делает, потому что, когда axios предоставляет объект FormData для функций браузера ajax ( XHR или fetch), браузер может использовать данные в объекте File для чтения и отправки файла.

Ваш собственный код JavaScript может также использовать данные в объекте File для чтения файла, используя FileReader (еще одна функция, предоставляемая браузером).

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


¹ Вероятно, не буквально в File объекте. Скорее всего, существует косвенная связь между этими двумя данными с использованием данных, находящихся в частном владении браузера.

...