DEV Community

Cover image for R2 Cloudflare penyimpanan object dengan PHP
Eko Priyanto
Eko Priyanto

Posted on

R2 Cloudflare penyimpanan object dengan PHP

install dependency dengan composer terlebih dahulu

Mengupload foto dengan PHP di R2

<?php
// Autoload composer
require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\Exception\AwsException;

// Konfigurasi untuk Cloudflare R2
$accessKey = 'accesskey'; // Access Key ID
$secretKey = 'secretkey'; // Secret Access Key
$bucketName = 'tong'; // Nama Bucket R2
$endpoint = 'https://userid.r2.cloudflarestorage.com'; // Endpoint R2

// Membuat client S3 menggunakan konfigurasi R2
$s3Client = new S3Client([
    'version'     => 'latest',
    'region'      => 'auto', // Cloudflare R2 menggunakan region 'auto'
    'endpoint'    => $endpoint, // Endpoint untuk R2
    'credentials' => [
        'key'    => $accessKey,
        'secret' => $secretKey,
    ],
    'use_path_style_endpoint' => true, // R2 menggunakan path style
]);

// Nama file gambar yang akan diupload
$filePath = 'gambarbahan2.jpg'; // Ganti dengan path gambar yang akan diupload
$objectKey = 'uploads/gambarserver2.jpg'; // Nama file di R2

try {
    // Mengupload file gambar ke R2
    $result = $s3Client->putObject([
        'Bucket'     => $bucketName,
        'Key'        => $objectKey,
        'SourceFile' => $filePath, // Path file lokal yang akan diupload
        'ACL'        => 'public-read', // Mengatur file agar dapat diakses publik (optional)
    ]);

    echo "File berhasil diupload! URL: " . $result['ObjectURL'];
} catch (AwsException $e) {
    // Menangani error
    echo "Error: " . $e->getMessage();
}
?>

Enter fullscreen mode Exit fullscreen mode

Mengambil dan Menyimpan gambar di server dari R2

<?php
// Autoload composer
require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\Exception\AwsException;

// Konfigurasi untuk Cloudflare R2
$accessKey = 'accesskey'; // Access Key ID
$secretKey = 'secretkey'; // Secret Access Key
$bucketName = 'tong'; // Nama Bucket R2
$endpoint = 'https://userid.r2.cloudflarestorage.com'; // Endpoint R2

// Membuat client S3 menggunakan konfigurasi R2
$s3Client = new S3Client([
    'version'     => 'latest',
    'region'      => 'auto', // Cloudflare R2 menggunakan region 'auto'
    'endpoint'    => $endpoint, // Endpoint untuk R2
    'credentials' => [
        'key'    => $accessKey,
        'secret' => $secretKey,
    ],
    'use_path_style_endpoint' => true, // R2 menggunakan path style
]);

// Nama objek yang ingin diambil
$objectKey = 'image_fx_ (62).jpg';

try {
    // Mengambil file dari R2 menggunakan getObject
    $result = $s3Client->getObject([
        'Bucket' => $bucketName,
        'Key'    => $objectKey,
    ]);

    // Menyimpan file yang diambil ke file lokal
    file_put_contents('file.jpg', $result['Body']);
    echo "File berhasil diambil dan disimpan!";
} catch (AwsException $e) {
    // Menangani error
    echo "Error: " . $e->getMessage();
}
?>

Enter fullscreen mode Exit fullscreen mode

List Folder di R2

<?php
// Autoload composer
require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\Exception\AwsException;

// Konfigurasi untuk Cloudflare R2
$accessKey = 'accesskey'; // Access Key ID
$secretKey = 'secretkey'; // Secret Access Key
$bucketName = 'tong'; // Nama Bucket R2
$endpoint = 'https://userid.r2.cloudflarestorage.com'; // Endpoint R2

// Membuat client S3 menggunakan konfigurasi R2
$s3Client = new S3Client([
    'version'     => 'latest',
    'region'      => 'auto',
    'endpoint'    => $endpoint,
    'credentials' => [
        'key'    => $accessKey,
        'secret' => $secretKey,
    ],
    'use_path_style_endpoint' => true,
]);

// Nama folder yang ingin dilihat (contoh: "uploads/")
$folderPrefix = 'uploads/';

try {
    // Mendapatkan daftar objek dalam folder (prefix) tertentu
    $objects = $s3Client->listObjectsV2([
        'Bucket' => $bucketName,
        'Prefix' => $folderPrefix,
    ]);

    // Mengecek apakah ada objek dalam folder tersebut
    if (isset($objects['Contents']) && count($objects['Contents']) > 0) {
        echo "Daftar file dalam folder '$folderPrefix':<br><br>";

        // Menampilkan daftar file
        foreach ($objects['Contents'] as $object) {
            echo $object['Key'] . '<br>';
        }
    } else {
        echo "Tidak ada file ditemukan di folder '$folderPrefix'.";
    }
} catch (AwsException $e) {
    echo "Error: " . $e->getMessage();
}
?>

Enter fullscreen mode Exit fullscreen mode

Menampilkan gambar dari R2

<?php
// Autoload composer
require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\Exception\AwsException;

// Konfigurasi untuk Cloudflare R2
$accessKey = 'accesskey'; // Access Key ID
$secretKey = 'secretkey'; // Secret Access Key
$bucketName = 'tong'; // Nama Bucket R2
$endpoint = 'https://userid.r2.cloudflarestorage.com'; // Endpoint R2

// Membuat client S3 menggunakan konfigurasi R2
$s3Client = new S3Client([
    'version'     => 'latest',
    'region'      => 'auto',
    'endpoint'    => $endpoint,
    'credentials' => [
        'key'    => $accessKey,
        'secret' => $secretKey,
    ],
    'use_path_style_endpoint' => true,
]);

// Nama objek (gambar) yang ingin diakses
$objectKey = 'ce.jpg'; // Ganti dengan nama file yang sesuai

try {
    // Membuat pre-signed URL untuk mengakses file selama 1 jam
    $command = $s3Client->getCommand('GetObject', [
        'Bucket' => $bucketName,
        'Key'    => $objectKey,
    ]);

    // Membuat pre-signed URL
    $request = $s3Client->createPresignedRequest($command, '+1 hour');

    // Mendapatkan URL yang dapat digunakan untuk mengakses file
    $presignedUrl = (string) $request->getUri();

    echo 'Pre-signed URL: ' . $presignedUrl;
} catch (AwsException $e) {
    echo "Error: " . $e->getMessage();
}
?>

<img src="<?php echo $presignedUrl; ?>" alt="Gambar dari Cloudflare R2" />

Enter fullscreen mode Exit fullscreen mode

Mengunduh dan ZIP file di folder R2

<?php
// Autoload composer
require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\Exception\AwsException;


// Konfigurasi untuk Cloudflare R2
$accessKey = 'accesskey'; // Access Key ID
$secretKey = 'secretkey'; // Secret Access Key
$bucketName = 'tong'; // Nama Bucket R2
$endpoint = 'https://userid.r2.cloudflarestorage.com'; // Endpoint R2

// Membuat client S3 menggunakan konfigurasi R2
$s3Client = new S3Client([
    'version'     => 'latest',
    'region'      => 'auto',
    'endpoint'    => $endpoint,
    'credentials' => [
        'key'    => $accessKey,
        'secret' => $secretKey,
    ],
    'use_path_style_endpoint' => true,
]);

// Nama folder yang ingin dilihat (contoh: "uploads/")
$folderPrefix = 'uploads/';
$zipFileName = 'uploads.zip'; // Nama file ZIP yang akan dihasilkan

try {
    // Mendapatkan daftar objek dalam folder (prefix) tertentu
    $objects = $s3Client->listObjectsV2([
        'Bucket' => $bucketName,
        'Prefix' => $folderPrefix,
    ]);

    // Mengecek apakah ada objek dalam folder tersebut
    if (isset($objects['Contents']) && count($objects['Contents']) > 0) {
        // Membuat file ZIP
        $zip = new ZipArchive();

        // Membuka file ZIP untuk penulisan
        if ($zip->open($zipFileName, ZipArchive::CREATE) === TRUE) {
            // Menambahkan setiap file dalam folder ke ZIP
            foreach ($objects['Contents'] as $object) {
                $objectKey = $object['Key'];
                $fileName = basename($objectKey); // Ambil nama file dari key

                // Mengambil file dari R2 dan menambahkannya ke ZIP
                $result = $s3Client->getObject([
                    'Bucket' => $bucketName,
                    'Key'    => $objectKey,
                ]);

                $zip->addFromString($fileName, $result['Body']);
            }

            // Menutup file ZIP
            $zip->close();

            echo 'File ZIP berhasil dibuat. <a href="' . $zipFileName . '" download>Unduh ZIP</a>';
        } else {
            echo 'Gagal membuat file ZIP.';
        }
    } else {
        echo "Tidak ada file ditemukan di folder '$folderPrefix'.";
    }
} catch (AwsException $e) {
    echo "Error: " . $e->getMessage();
}
?>

Enter fullscreen mode Exit fullscreen mode

Top comments (0)