Пользователи отправляют с сайта большие файлы 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
Как разбить большой файл .xls/.xlsx на куски с помощью js, а затем собрать его в PHP (Laravel)? [закрыто] ⇐ Php
Кемеровские программисты php общаются здесь
1736015027
Anonymous
Пользователи отправляют с сайта большие файлы Excel. Разрезал файл на куски, загрузил на сервер (PHP).
На стороне сервера объединил куски в один файл.xls, но при открытии появляется сообщение "контент, который не удалось было найдено в книге".
Я был бы признателен, если бы вы ответили на мои вопросы:
Вопрос 1: Разделяю ли я файл правильно .xls по частям и загружать на сервер?
Вопрос 2: Как собрать фрагменты в один файл .xls на стороне сервера (PHP)?
[b]Пример моего кода[/b]
[b]HTML[/b]
Send
[b]JS[/b]
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();
}
[b]Сервер PHP (Laravel)[/b]
$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))
);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79329372/how-to-split-a-large-file-xls-xlsx-into-chunks-using-js-and-then-build-in-p[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия