2015-07-01 2 views
1

Я создаю веб-портал, где конечный пользователь загрузит файл csv, и я сделаю некоторые манипуляции с этим файлом на стороне сервера (python). Существует некоторая латентность и отставание на стороне сервера, поэтому я не хочу отправлять сообщение от сервера к клиенту относительно плохого формата загруженного файла. Есть ли способ сделать тяжелую работу на стороне клиента, может использовать js или jquery, чтобы проверить, является ли загруженный файл «запятой» отделенной или нет и т. Д. И т. Д.?проверить загруженный формат файла на стороне клиента

Я знаю, что мы можем сделать «accept = .csv» в html, чтобы расширение файла имело формат csv, но как это сделать с содержанием.

+0

Это должно стать хорошей отправной точкой .. http://stackoverflow.com/questions/2513642/javascript-csv-validation – user2879041

+0

просто разобрать в JS и посмотреть, есть ли у него 2+ строки одного и того же количества столбцов – dandavis

+0

Совет по безопасности: никогда не доверять данным со стороны клиента. Не забудьте также проверить, что содержимое файла - это текст на стороне сервера. –

ответ

0

Доступ к локальным файлам из Javascript возможен только с помощью Файлового API (https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications) - с помощью этого вы можете проверить содержимое, соответствует ли оно вашим ожиданиям или нет.

+0

'URL.createObjectURL (файл)' это еще один способ, хотя 'FileReader', вероятно, лучше подходит для этой конкретной задачи. просто говоря, что File API не является единственным способом получить или использовать данные локальных файлов. – dandavis

0

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

Очевидное предостережение:
Вам по-прежнему необходимо проверить серверную сторону. Любой может изменить ваш javascript для вашего клиента, чтобы притвориться плохим файлом.

Еще один оговорка: Я уверен, что вы можете иметь скрытые символы запятой в действительном файле csv. Я думаю, что экранирующий символ может отличаться по некоторым реализациям тоже ...

// Fired when the user chooses a file in the OS dialog box 
// They will have clicked <input id="fileId" type="file"> 
document.getElementById('fileId').onchange = function (evt) { 
    if(!evt.target.files || evt.target.files.length === 0){ 
    console.log('No files selected'); 
    return; 
    } 
    var uploadTitle = evt2.target.files[0].name; 
    var uploadSize = evt2.target.files[0].size; 
    var uploadType = evt2.target.files[0].type; 

    // To manipulate the file you set a callback for the whole contents: 
    var FR = new FileReader(); 
    // I've only used this readAsDataURL which will encode the file like data:image/gif;base64,R0lGODl... 
    // I'm sure there's a similar call for plaintext 
    FR.readAsDataURL($('#file')[0].files[0]); 
    FR.onload = function(evt2){ 
    var evtData = { 
     filesEvent: evt, 
    } 
    var uploadData = evt2.result 
    console.log(uploadTitle, uploadSize, uploadType, uploadData); 
    } 
} 
+0

Спасибо, ребята, имеет смысл сделать это на стороне сервера, чтобы быть уверенным. Я буду использовать этот код, чтобы выполнить некоторую проверку на стороне клиента. – user3089927

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