せっかくデータベースのデータを抽出してExcelファイルを作成することができたのに、ファイルリンクを踏んでもExcelファイルとしてダウンロードにならずやや焦りました。ググってもそれらしき内容が出てこなく時間を取られてしまいました。
メタデータの Content-Disposition を設定すればよいようです。PHPファイル上では、インスタンス生成後に$s3client->putObject()内で、’ContentDisposition’ => ‘attachment’を追加したらうまくいきました。
// S3clientのインスタンス生成
$s3client = new Aws\S3\S3Client([
'credentials' => [
'key' => AWS_ACCESS_KEY,
'secret' => AWS_SECRET_ACCESS_KEY
],
'region' => 'ap-northeast-1',
'version' => 'latest'
]);
try {
$s3client_CSV_upload = $s3client->putObject([
'ACL' => 'public-read',
'Bucket' => AWS_S3_BUCKET_NAME,
'Key' => $upload_file['file_name'],
'SourceFile' => $upload_file['file_path'],
'ContentType' => mime_content_type($upload_file['file_path']),
'ContentDisposition' => 'attachment'
]);
// アップロードファイルのURL取得
$results['upload_name'] = $s3client_CSV_upload['ObjectURL'];
$results['result'] = 'SUCCESS';
} catch (Exception $e) {
$results['result'] = 'UPLOAD_ERROR';
errorLog($e);
}