В настоящее время я работаю над проектом, в который мне нужно импортировать некоторые данные через CSV. Поскольку число строк слишком велико, сервер в определенный момент выходит из строя, поэтому я учил разбивать файл на 100 строк каждый, используя JS и Papaparse.
Это то, что я делаю
1 - Parse CSV
2 - Получить все строки
3 - Группировать строки по блокам 100
4 - Загрузить каждый блок отдельно через AJAX
AJAX (импорт. php)
if (isset($_FILES["file"])) {
$file_tmp = $_FILES['filecsv']['tmp_name'];
$tmp = pathinfo($_FILES["filecsv"]["name"]);
$file_ext = $tmp['extension'];
$delimiter = $_POST['delimiter'];
import($file_tmp, $file_ext, $delimiter);
...
}
JS
Object.defineProperty(Array.prototype, 'chunk', {
value: function(chunkSize) {
var array = this;
return [].concat.apply([],
array.map(function(elem, i) {
return i % chunkSize ? [] : [array.slice(i, i + chunkSize)];
})
);
}
});
........
var file = $("#filecsv").get(0).files[0];
var delimiter = $("#delimiter").val();
var data = [];
Papa.parse(file,
{
header: true,
delimiter: delimiter,
step: function(row)
{
data.push(row.data);
},
complete: function ()
{
var chunks = data.chunk(100);
console.log(chunks.length);
for(var index in chunks)
{
var chunk = chunks[index];
var string = Papa.unparse(chunk);
var formData = new FormData();
formData.append('delimiter', delimiter);
formData.append('filecsv', new File([new Blob([string])], file.name));
$.ajax({
url: "import.php",
data: formData,
processData: false,
contentType: false,
type: 'POST',
success: function (data)
{
console.log(data);
},
error: function ()
{
}
});
break;
}
}
});
Когда я загружаю файл, в журнале, полученном от AJAX, говорится, что в CSV отсутствуют поля, что заставляет меня думать, что файл загружен, но без данных.
Я не смог найти ничего похожего проблема на SO, кроме это но не работает