Как разбить большой файл .xls/.xlsx на куски с помощью js, а затем собрать его в PHP (Laravel)? [закрыто]Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как разбить большой файл .xls/.xlsx на куски с помощью js, а затем собрать его в PHP (Laravel)? [закрыто]

Сообщение Anonymous »

Пользователи отправляют с сайта большие файлы Excel. Разрезал файл на куски, загрузил на сервер (PHP).
На стороне сервера объединил куски в один файл.xls, но при открытии появляется сообщение "контент, который не удалось было найдено в книге".
Я был бы признателен, если бы вы ответили на мои вопросы:
Вопрос 1: Разделяю ли я файл правильно .xls по частям и загружать на сервер?
Вопрос 2: Как собрать фрагменты в один файл .xls на стороне сервера (PHP)?
Пример моего кода
HTML




Send



JS
let chunkList = [];

let fileInput = document.getElementById('upload_file');
fileInput.addEventListener('change', function (event) {

let file = event.target.files[0];
let chunkSize = 1048576;
let currentChunk = 0;
let countChunks = Math.ceil(file.size / chunkSize)
let suffix = 'xls';
const hash = `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;

for(let i = 0; i < countChunks; i++){
const item = {
chunk: file.slice(currentChunk, currentChunk + chunkSize),
fileName: `${hash}_${i}.${suffix}`
}
currentChunk += chunkSize
chunkList.push(item)
}
})

let token = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
let my_but = document.getElementById('but');

my_but.addEventListener('click', async function (event) {

let file = document.getElementById('upload_file').files[0];

if (file === undefined || chunkList.length < 1) return;

for (const item of chunkList) {
const formData = new FormData()
formData.append('chunk', item.chunk)
formData.append('filename', item.fileName)

let resp = await sendChunkFile(formData);
console.log(resp)
}
})

async function sendChunkFile(formData){
let response = await fetch('/api/chunks-file-upload', {
headers: {"X-CSRF-TOKEN": token},
method: 'POST',
credentials: "same-origin",
body: formData
});

return await response.json();
}

Сервер PHP (Laravel)
$pathChunks = 'chunks/';
$pathMerge = 'merge-file-chunks/';

$chunkNames = Storage::disk('local')->files($pathChunks);

foreach ($chunkNames as $chunkName) {
$result = Storage::disk('local')->append(
$pathMerge.'file.xls',
Storage::disk('local')->get($pathChunks.basename($chunkName))
);
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... build-in-p
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»