一般的な動画や画像ファイルは最初から圧縮されているので転送時に
ファイルを効率化することは難しいでしょう
ネット回線およびサーバー側の処理能力の問題なので
クライアント側でできることはほぼありません
例えば分割して並行してアップロードするとしても回線がボトルネック
になればアップロード時間は理論的にはさほど変わらないはずです
分割してfetch
//send.html
javascript
1<script>
2window.addEventListener('DOMContentLoaded', ()=>{
3 document.querySelector('#btn').addEventListener('click',e=>{
4 e.preventDefault();
5 const file=document.querySelector('#file');
6 const url=file.form.getAttribute("action");
7 const content = file.files[0];
8 const blob=new Blob([content],{type:file.type});
9 const fr = new FileReader();
10 const sep_num=8;//好きなだけ分割してください
11 const fd=new FormData();
12 fr.addEventListener('load',e=>{
13 let src=e.target.result;
14 src=new Uint8Array(src);
15 src=String.fromCharCode.apply("",src);
16 const sep_size=parseInt(src.length/sep_num)+1;
17 new Array(sep_num).fill(null).forEach((_,x)=>{
18 const sep_file=src.substr(x*sep_size,sep_size);
19 const buffer = new Uint8Array(sep_file.length).map((_,x)=>sep_file.charCodeAt(x));
20 const blob2 = new Blob([buffer.buffer], {type: content.type});
21 fd.append(file.getAttribute('name')+"[]",blob2,content.name);
22 });
23 fetch(url,{method:"post",body:fd}).then(res=>res.blob()).then(console.log);
24 });
25 fr.readAsArrayBuffer(blob);
26 });
27});
28</script>
29<form action="recv.php" method="post" enctype="multipart/form-data">
30<input type="file" id="file" name="myfile">
31<input type="button" value="fetch" id="btn">
32<input type="submit" value="send">
33</form>
// recv.php
PHP
1<?PHP
2if(count($_FILES)==0 or !isset($_FILES["myfile"])){
3 print "no data";
4}elseif(count($_FILES["myfile"]["tmp_name"])==1){
5 header("Content-Type:".$_FILES["myfile"]["type"]);
6 readfile($_FILES["myfile"]["tmp_name"]);
7 exit;
8}else{
9 header("Content-Type:".$_FILES["myfile"]["type"][0]);
10 foreach($_FILES["myfile"]["tmp_name"] as $val){
11 readfile($val);
12 }
13 exit;
14}