Amazon S3(AWS)でExcelファイルが開かずにブラウザで文字列での表示になってしまう

せっかくデータベースのデータを抽出して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);
    }

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です