Railway bucket does not allowing to put objects
coddermind
PROOP

a month ago

follwing is the way im using to upload the image file to the railway bucket in django view:

from django.shortcuts import render
from .forms import ImageUploadForm
import boto3
from django.conf import settings
from django.contrib import messages

def home(request):
    image_url = None

    if request.method == "POST":
        form = ImageUploadForm(request.POST, request.FILES)
        if form.is_valid():
            img = request.FILES["image"]
            s3 = boto3.client(
                "s3",
                endpoint_url=settings.AWS_S3_ENDPOINT_URL,
                aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
                aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,
                region_name="auto",
            )

            try:
                key = f"uploads/{img.name}"
                response = s3.put_object(
                    Bucket=settings.AWS_STORAGE_BUCKET_NAME,
                    Key=key,
                    Body=img.read(),
                    ContentType=img.content_type
                )
                print("UPLOAD RESPONSE:", response)
                # Generate signed URL for display
                image_url = s3.generate_presigned_url(
                    "get_object",
                    Params={"Bucket": settings.AWS_STORAGE_BUCKET_NAME, "Key": key},
                    ExpiresIn=3600
                )
                messages.success(request, f"Uploaded successfully: {key}")

            except Exception as e:
                messages.error(request, f"Upload failed: {str(e)}")
                print("UPLOAD ERROR:", e)

    else:
        form = ImageUploadForm()

    return render(request, "home.html", {"form": form, "image_url": image_url})

and it says:

Upload failed: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied.

0 Replies

Loading...