2016-07-26 3 views
-1

Я пытаюсь загрузить CSV-файл с помощью drag-and-drop, но когда я загружаю что-то еще, например Excel-файл, я не получаю предупреждающее сообщение. Что я делаю не так?Подтвердить последние несколько символов строки

Я вызываю функцию ниже, которая должна действительно проверить, загружаю ли CSV-файл. Позже, после того, как я проверил расширение файла, я прочитал файл и заполнил таблицу данными, которые у меня есть в этом файле (CSV). Вот почему важно, чтобы не было другого типа загрузки, кроме CSV.

Вот код:

function handleFileSelection(evt) { 
    evt.stopPropagation(); // Do not allow the drop event to bubble. 
    evt.preventDefault(); // Prevent default drop event behavior. 

    var files = evt.dataTransfer.files; // Grab the list of files dragged to the drop box. 

    if (!files) { 
     alert("<p>At least one selected file is invalid - do not select any folders.</p><p>Please reselect and try again.</p>"); 
     return; 
    } 

    // "files" is a FileList of file objects. Try to display the contents of each file: 
    for (var i = 0, file; file = files[i]; i++) { 
     if (!file) { 
      alert("Unable to access " + file.name); 
      continue; // Immediately move to the next file object. 
     } 
     if (file.size == 0) { 
      alert("Skipping " + file.name.toUpperCase() + " because it is empty."); 
      continue; 
     } 
     if (!file.name.endsWith == ".csv") { 
      alert("Skipping " + file.name.toUpperCase() + " because it is not a known text file type."); 
      continue; 
     } 
     startFileRead(file); // Asychronously fire off a file read request. 
    } 
} 
+0

Просьба предоставить больше контекста и кода. Где вы называете этот фрагмент кода? Где определяется массив файлов? – trincot

ответ

0

Проблема с этой линии:

if (!file.name.endsWith == ".csv") { 

Вы сравниваете отрицание свойства с «.csv», в то время как вы, вероятно, хотели выполнить the function with that name.

Однако эта функция доступна не во всех браузерах, так что вы будете лучше из этой альтернативы:

if (file.name.search(/\.csv$/) === -1) { 

Ремарк

код в первом if блоке никогда не будет выполнять , потому что !file всегда будет оцениваться до false. Это связано с тем, что условие цикла в цикле for (среднее выражение: file = files[i]) сделает выход цикла, когда file станет ложным.

+0

большое спасибо, он работает! Знаете ли вы, есть ли способ проверить кодировку файла? Скажем: мой файл должен быть «UTF-8», и когда это не так, я также предупреждаю пользователя об этом? Спасибо! –

+0

Добро пожаловать. О кодировке: это действительно другой вопрос, и я не уверен, как это можно сделать сам. Могу ли я попросить вас опубликовать его как новый вопрос? Таким образом, вы снова привлечете внимание других людей, чтобы посмотреть на это. – trincot

-2

Где у вас есть это:

if (!file.name.endsWith == ".csv") { 

Вы хотите:

if (!file.name.endsWith(".csv")) { 
+0

не работает. Если мне нравится в вашем примере, мой файл csv вообще не загружается. –

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