загрузить строку в виде файла javascript - PullRequest
0 голосов
/ 21 апреля 2020

В настоящее время я работаю над проектом, в который мне нужно импортировать некоторые данные через 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, кроме это но не работает

...