Извлечение текста из PDF после загрузки (приложение Django на AWS)

@login_required(login_url="/login/")
def upload_view(request):
    posts = Temp.objects.all()
    common_tags = Temp.tags.most_common()

    if request.method == "POST":
        form = TempForm(request.POST, request.FILES, initial={"user": request.user})
        if form.is_valid():
            newpost = form.save(commit=False)
            newpost.slug = slugify(newpost.title)
            unique_slug = newpost.slug
            num = 1
            while Temp.objects.filter(slug=unique_slug).exists():
                unique_slug = "{}-{}".format(newpost.slug, num)
                num += 1
            newpost.slug = unique_slug
            newpost.user = request.user

            # Process the document before saving
            extracted_text = process_document(
                request.FILES["file_upload"], newpost.language
            )

            # Save the post and the extracted text
            newpost.ocr_text = extracted_text

            newpost.save()  # Save the file first
            form.save_m2m()

            notify_users_about_new_post(form)

            messages.success(request, "Your Post has been uploaded successfully.")
        else:
            messages.warning(request, "Upload unsuccessful. Please try again.")
    else:
        form = TempForm()

    context = {
        "posts": posts,
        "common_tags": common_tags,
        "form": form,
    }
    return render(request, "upload_file.html", context)

В настоящее время пользователи могут загружать файлы, и они будут храниться в S3. Я хочу извлечь содержимое из файла и сохранить его в базе данных mySQL. Я пробовал разные способы, но все они оказались неудачными.

  1. Я использовал следующий код. Он работает, когда я тестирую его локально, но не загружается в Production.
urllib.request.urlretrieve(
   [link to S3 storage, where the document can be viewed publicly],
    "temp.pdf",
)
  1. Я использовал boto3. Он работает, когда я тестирую его локально, но не загружается в Production.
import boto3

# Set environment variables
os.environ["AWS_ACCESS_KEY_ID"] = [KEY]
os.environ["AWS_SECRET_ACCESS_KEY"] = [KEY]
os.environ["AWS_DEFAULT_REGION"] = [REGION]


def download_file_from_s3(bucket_name, object_key, file_name):
    s3 = boto3.client("s3")
    try:
        s3.download_file(bucket_name, object_key, file_name)
        print(f"File {file_name} downloaded from S3 bucket {bucket_name}.")
    except Exception as e:
        print(f"Error downloading file: {e}")

  1. Я использовал приведенный выше код, но получил ошибку Server 500. Я полагаю, что ошибка находится в:
extracted_text = process_document(
                request.FILES["file_upload"], newpost.language
            )

Есть предложения, в чем может быть проблема? Я думаю, что ошибка может быть вызвана двумя причинами:

  1. Я не могу ничего загрузить в экземпляре EC2.
  2. Файл может быть загружен, но не на том же уровне директора, что и файл view.py, что приводит к ошибке переданной относительной ссылки.
Вернуться на верх