R2 Cloudflare penyimpanan object dengan PHP
Eko Priyanto

Eko Priyanto @ekopriyanto

About: Eko Priyanto

Location:
Indonesia
Joined:
Nov 27, 2020

R2 Cloudflare penyimpanan object dengan PHP

Publish Date: Feb 2
0 0

install dependency dengan composer terlebih dahulu

composer require aws/aws-sdk-php

Enter fullscreen mode Exit fullscreen mode

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

Comments 0 total

    Add comment