Python ile Cloudflare R2'ye Dosya Yüklemeyi Ustalaşmak: Kapsamlı Bir Rehber

Python kullanarak Cloudflare R2'ye dosya yüklemeyi verimli bir şekilde öğrenin, ortamın kurulumu, yeniden kullanılabilir bir yükleme fonksiyonu oluşturma ve FastAPI ile entegrasyon dahil.

1. Giriş

Sürekli gelişen bulut depolama çözümleri dünyasında, Cloudflare R2 rekabetçi fiyatlandırma ve etkileyici performans sunan S3 uyumlu bir API ile güçlü bir rakip olarak ortaya çıktı. Bu makale, size Python kullanarak Cloudflare R2’ye dosya yükleme sürecinde rehberlik edecek ve çeşitli uygulamalara sorunsuz bir şekilde entegre edilebilen çok yönlü, yeniden kullanılabilir bir fonksiyon oluşturmaya odaklanacak.

2. Ortamın Kurulumu

2.1 Ön Koşullar

Uygulamaya geçmeden önce, aşağıdakilere sahip olduğunuzdan emin olun:

  • Sisteminizde Python 3.7 veya daha yeni bir sürüm yüklü
  • R2 etkinleştirilmiş bir Cloudflare hesabı
  • R2 bucket kimlik bilgilerinize erişim (Hesap Kimliği, Erişim Anahtarı Kimliği ve Gizli Erişim Anahtarı)

2.2 Gerekli Paketlerin Kurulumu

Cloudflare R2 ile etkileşim kurmak için boto3 kütüphanesini kullanacağız. Pip kullanarak yükleyin:

1
pip install boto3

3. Cloudflare R2 için S3 İstemcisinin Yapılandırılması

Cloudflare R2 ile etkileşim kurmak için, uygun ayarlarla bir S3 istemcisi yapılandırmamız gerekiyor:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import boto3
from botocore.config import Config

s3 = boto3.client(
    "s3",
    endpoint_url="https://<hesapkimliği>.r2.cloudflarestorage.com",
    aws_access_key_id="<erişim_anahtarı_kimliği>",
    aws_secret_access_key="<erişim_anahtarı_gizli>",
    config=Config(signature_version="s3v4"),
)

3.1 Yapılandırmayı Anlamak

  • endpoint_url: Bu, Cloudflare R2 bucket’ınız için giriş noktasıdır. <hesapkimliği>‘ni gerçek Cloudflare hesap kimliğinizle değiştirin.
  • aws_access_key_id ve aws_secret_access_key: Bunlar R2 bucket kimlik bilgilerinizdir. Bunları gerçek değerlerinizle değiştirin.
  • config=Config(signature_version="s3v4"): Bu, Cloudflare R2 tarafından kimlik doğrulama için gerekli olan İmza Sürümü 4’ün kullanımını belirtir.

4. Yeniden Kullanılabilir Bir Yükleme Fonksiyonu Oluşturma

Cloudflare R2’ye dosya yüklemelerini yöneten çok yönlü bir fonksiyon oluşturalım:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import os
from typing import Optional

BUCKET_NAME = "<bucket_adınız>"
CLOUDFLARE_PUBLIC_URL = "https://<özel_alan_adınız>/"

def cloudflare_yukle(dosya_yolu: str, nesne_adi: Optional[str] = None) -> str:
    """
    Cloudflare R2'ye bir dosya yükler, genel URL'yi döndürür ve yerel dosyayı siler.

    :param dosya_yolu: Yüklenecek dosyanın yolu
    :param nesne_adi: S3 nesne adı. Belirtilmezse, dosya_yolu'nun temel adı kullanılır
    :return: Yüklenen dosyanın genel URL'si
    """
    # S3 nesne_adi belirtilmediyse, dosya_yolu'nun temel adını kullan
    if nesne_adi is None:
        nesne_adi = os.path.basename(dosya_yolu)

    try:
        # Dosyayı yükle
        s3.upload_file(dosya_yolu, BUCKET_NAME, nesne_adi)
        
        # Yüklenen dosya için genel bir URL oluştur
        url = f"{CLOUDFLARE_PUBLIC_URL}{nesne_adi}"
        
        # Yerel dosyayı sil
        os.remove(dosya_yolu)
        
        return url
    except Exception as e:
        print(f"Bir hata oluştu: {e}")
        return ""

4.1 Fonksiyon Açıklaması

  • Fonksiyon iki parametre kabul eder: dosya_yolu (gerekli) ve nesne_adi (isteğe bağlı).
  • Eğer nesne_adi sağlanmazsa, dosya yolunun temel adını varsayılan olarak kullanır.
  • Dosyayı s3.upload_file() kullanarak belirtilen R2 bucket’ına yükler.
  • Başarılı bir yüklemeden sonra, dosya için genel bir URL oluşturur.
  • Ardından, alan boşaltmak için yerel dosya silinir.
  • İşlem sırasında herhangi bir hata oluşursa, yakalanır, yazdırılır ve boş bir dize döndürülür.

5. FastAPI ile Entegrasyon

İşte cloudflare_yukle fonksiyonunu bir FastAPI uygulamasına entegre etmenin bir örneği:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from fastapi import FastAPI, UploadFile, File
from fastapi.responses import JSONResponse

app = FastAPI()

@app.post("/yukle")
async def dosya_yukle(dosya: UploadFile = File(...)):
    # Yüklenen dosyayı geçici olarak kaydet
    gecici_dosya_yolu = f"/tmp/{dosya.filename}"
    with open(gecici_dosya_yolu, "wb") as buffer:
        buffer.write(await dosya.read())
    
    # Cloudflare R2'ye yükle
    url = cloudflare_yukle(gecici_dosya_yolu)
    
    if url:
        return JSONResponse(content={"dosya_url": url}, status_code=200)
    else:
        return JSONResponse(content={"hata": "Dosya yüklenemedi"}, status_code=500)

Bu endpoint dosya yüklemelerini kabul eder, geçici olarak kaydeder, ardından R2 yüklemesi ve temizlik için cloudflare_yukle fonksiyonumuzu kullanır.

6. En İyi Uygulamalar ve Dikkat Edilecek Noktalar

6.1 Sağlam Hata Yönetimi

Fonksiyonumuz temel hata yönetimi içerse de, üretim ortamında daha kapsamlı hata yönetimi ve günlük kaydı uygulamalısınız. Hataları ve önemli olayları izlemek için bir günlük kaydı kütüphanesi kullanmayı düşünün.

6.2 Güvenlik En İyi Uygulamaları

R2 kimlik bilgilerinizin güvenli bir şekilde saklandığından ve kodunuzda açığa çıkmadığından emin olun. Hassas bilgileri korumak için ortam değişkenlerini veya güvenli bir sır yönetim sistemi kullanın.

6.3 Dosya Boyutu Yönetimi

Uygulamanızda ve Cloudflare R2’de dosya boyutu sınırlarının farkında olun. Büyük dosyalar için, güvenilirliği ve performansı artırmak adına çok parçalı yüklemeler uygulamayı düşünün.

6.4 Eşzamanlı Yüklemeler İçin Optimizasyon

Uygulamanızın birden fazla yüklemeyi eşzamanlı olarak işlemesi gerekiyorsa, yükleme fonksiyonunun asenkron versiyonlarını uygulamayı veya verimi artırmak için threading kullanmayı düşünün.

6.5 İçerik Türü ve Metadata

Yüklenen dosyalar için içerik türünü ve özel metadatayı ayarlama desteği eklemeyi düşünün. Bu, R2 bucket’ınız içinde uygun dosya yönetimi ve organizasyon için çok önemli olabilir.

7. Sonuç

Python ve boto3 kütüphanesi kullanarak Cloudflare R2’ye dosya yüklemek, çeşitli uygulamalara kolayca entegre edilebilen basit bir süreçtir. cloudflare_yukle gibi yeniden kullanılabilir bir fonksiyon oluşturarak, uygulamanızın farklı bölümlerinde dosya yükleme süreçlerinizi kolaylaştırabilirsiniz.

Bulut depolama çözümleri gelişmeye devam ederken, Cloudflare R2 performans, maliyet etkinliği ve S3 uyumluluğu arayan geliştiriciler için cazip bir seçenek sunuyor. R2’ye dosya yüklemelerinde ustalaşarak, modern bulut bilişim ortamında değerli bir beceri kazanmış oluyorsunuz.

Hataları zarif bir şekilde yönetmeyi, kimlik bilgilerinizi güvence altına almayı ve üretime geçerken performans optimizasyonlarını göz önünde bulundurmayı unutmayın. Bu araçlar ve bilgilerle donanmış olarak, Python uygulamalarınızda Cloudflare R2’yi kullanmak için iyi hazırlanmış durumdasınız.

Writing about the internet