31 lines
1.0 KiB
JavaScript
31 lines
1.0 KiB
JavaScript
|
|
// Размер чанка в байтах
|
|
const CHUNK_SIZE = 1024 * 1024; // 1MB
|
|
|
|
async function uploadFileInChunks(file) {
|
|
|
|
const totalChunks = Math.ceil(file.size / CHUNK_SIZE);
|
|
|
|
for (let chunkIndex = 0; chunkIndex < totalChunks; chunkIndex++) {
|
|
|
|
// Вычисляем начало и конец текущего чанка
|
|
const start = chunkIndex * CHUNK_SIZE;
|
|
const end = Math.min(start + CHUNK_SIZE, file.size);
|
|
|
|
// Извлекаем чанк из файла
|
|
const chunk = file.slice(start, end);
|
|
|
|
// Создаём FormData для отправки чанка
|
|
const formData = new FormData();
|
|
formData.append('file_chunk', chunk);
|
|
formData.append('chunk_index', chunkIndex);
|
|
formData.append('total_chunks', totalChunks);
|
|
formData.append('filename', file.name);
|
|
|
|
// Отправляем чанк на сервер
|
|
await fetch('upload.php', {
|
|
method: 'POST',
|
|
body: formData
|
|
});
|
|
}
|
|
} |