Загрузка изображений из ведра S3 в Django

Пытаюсь загрузить изображения с помощью кнопки загрузки, но когда я нажимаю ее, вместо загрузки изображения происходит переход на ссылку s3bucket. Ссылка, на которую она перенаправляет, - https://bucketname.s3.amazonaws.com/images/filename.jpeg. Я хочу, чтобы при нажатии на кнопку загрузки изображение загружалось на устройство пользователя, а не перенаправлялось. Вот мой основной вид галереи, который использует поисковую подсказку для поиска имен файлов + ключевых слов в моей базе данных, а затем извлекает подходящие изображения из ведра.

def gallery(request):
    query = request.GET.get('q', 'free wallpapers') 

    s3_image_urls = []
    top_search_terms = []

    keywords = query.split()

    conditions = []
    query_params = []
    for keyword in keywords:
        conditions.append("description LIKE %s")
        query_params.append('%' + keyword + '%')

    sql_query = "SELECT image_key FROM images_table WHERE " + " AND ".join(conditions)

    with connection.cursor() as cursor:
        cursor.execute(sql_query, query_params)
        results = cursor.fetchall()

    s3_bucket_url = 'https://{}.s3.amazonaws.com/images/'.format(settings.AWS_STORAGE_BUCKET_NAME)

    # Generate image URLs
    for result in results:
        for image_key in result:
            image_url = s3_bucket_url + image_key
            s3_image_urls.append(image_url)

    # Log the search term into the search_logs table
    with connection.cursor() as cursor:
        cursor.execute("SELECT search_count FROM search_logs WHERE search_term = %s", [query])
        row = cursor.fetchone()

        if row:
            new_count = row[0] + 1
            cursor.execute("UPDATE search_logs SET search_count = %s WHERE search_term = %s", [new_count, query])
        else:
            # If it doesn't exist, insert a new record
            cursor.execute("INSERT INTO search_logs (search_term, search_count) VALUES (%s, %s)", [query, 1])

    # Fetch top 10 search terms
    with connection.cursor() as cursor:
        cursor.execute("SELECT search_term FROM search_logs ORDER BY search_count DESC LIMIT 10")
        top_search_terms = [row[0] for row in cursor.fetchall()]

    # Get the username from session
    username = request.session.get('username')

    # Render the gallery template with the search results and top search terms
    return render(request, 'gallery.html', {
        'results': s3_image_urls,
        'top_search_terms': top_search_terms,
        'username': username
    })

в html шаблоне, где кнопка загрузки находится на каждом изображении. Кнопка загрузки перенаправляет на https://bucketname.s3.amazonaws.com/images/filename.jpeg вместо загрузки изображения. что я делаю не так.

<div class="bodyclass">
  {% if results %}
  <div class="grid">
      {% for image_url in results %}
      <div class="image-container">
          <img src="{{ image_url }}" alt="Image from S3">
          <div class="download-button">
            <a href="{{ image_url }}" download>
              <img src="{% static 'images/download.png' %}" alt="Download" class="icon">
          </a>
          </div>
          <div class="save-button">
              <img src="{% static 'images/plus.png' %}" alt="Save" class="icon">
          </div>
      </div>
      {% endfor %}
  </div>
  {% else %}
  <p>No results found.</p>
  {% endif %}
</div>

Добавлены политики ведер и CORS-политики на aws.

Вернуться на верх