サーバに置かれたファイルを圧縮してブラウザからダウンロードします。
フォルダ構成
ファイル構成を次に示します。フォルダ「filedownload/file」は圧縮されるフォルダになります。フォルダ「filedownload/work」は作業用のフォルダになります。
ボリューム シリアル番号は 0000004A 463E:749A です
G:\FILEDOWNLOAD
│ download.php
│ index.html
│
├─file
│ ├─folderA
│ │ text.txt
│ │
│ └─folderB
│ img.png
│
├─js
│ main.js
│
└─work
download.zip
ファイルのダウンロードアプリの作成
ファイルのダウンロードアプリを次のように作成します。
filedownload/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<title>ファイルダウンロード</title>
</head>
<body>
<div class="container">
<div class="col-5 mt-2 d-grid">
<button type="button" class="btn btn-primary mt-2 fs-1 top-btn-l" id="download">Download</button>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p"
crossorigin="anonymous"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="js/main.js"></script>
</body>
</html>
filedownload/js/main.js
$('#download').on('click', function () {
console.log('Downloadボタンがクリックされました。\n');
let folders = [];
console.log('okボタンがクリックされました。00 ');
folders[0] = 'folderA/text.txt';
folders[1] = 'folderB/img.png';
console.log(folders);
$('#data-displayalert').modal('hide');
$.ajax({
url: "./download.php",
type: "POST",
data: { "folders": folders },
dataType: "json",
})
.done(function (data) {
// success
//取得jsonデータ
console.log(data);
var anchor = document.createElement('a');
document.body.appendChild(anchor);
anchor.style = "display: none";
anchor.href = './work/' + data.zipPath;
anchor.download = data.zipPath;
anchor.click();
})
.fail(function (data, textStatus, errorThrown) {
// error
console.log('error: ' + data.responseText);
});
});
filedownload/download.php
<?php
$list = array();
$list = array("zipPath" => filedownload($_POST['folders']));
header("Content-type: application/json; charset=UTF-8");
echo json_encode($list);
exit;
function filedownload($folderlist)
{
// Zip ファイル名
$fileName = "download.zip";
// ファイルディレクトリ
$dir = __DIR__ . "/file";
// Zip ファイルパス
$zipPath = __DIR__ . "/work/" . $fileName;
// インスタンス作成
$zip = new ZipArchive();
// Zip ファイルをオープン
$res = $zip->open($zipPath, ZipArchive::CREATE);
// Zip ファイルのオープンに成功した場合
if ($res === true) {
foreach ($folderlist as $val) {
$zip->addFile("$dir/$val", $val);
}
// Zip ファイルをクローズ
$zip->close();
return $fileName;
} else {
echo "error Zip ファイル作成";
}
}
?>
ファイルのダウンロードアプリの実行
URL「http://localhost/filedownload/」をアクセスし、Downloadボタンを押すと、フォルダ「file」配下のファイルが圧縮されてダウンロードされます。
