39 lines
1.2 KiB
JavaScript
39 lines
1.2 KiB
JavaScript
|
||
// Размер чанка в байтах
|
||
const CHUNK_SIZE = 1024 * 1024; // 1MB
|
||
|
||
async function uploadFileInChunks(file,num) {
|
||
|
||
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 для отправки чанкаd
|
||
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
|
||
}).
|
||
then((res)=> res.json()).
|
||
then((res)=>{
|
||
|
||
document.getElementById("status_bar_"+num).innerHTML = Number(res.size/1024/1024).toFixed(2) || 0
|
||
console.log(res)
|
||
});
|
||
}
|
||
} |