Принудительно использовать TemporaryFileUploadHandler для указанного c запроса - PullRequest
0 голосов
/ 19 февраля 2020

Мне нужно обработать загруженный файл с Geo Django. Согласно документации, я должен использовать конструктор Datasource() из GDAL.

Проблема в том, что размер загружаемых шейп-файлов может быть меньше 2,5 МБ, поэтому MemoryFileUploadHandler используется по умолчанию, и поэтому я не могу получить доступ к пути к файлу, необходимому для Datasource().

Я решил переопределить request.upload_handlers для моего указанного c представления, используя только "django.core.files.uploadhandler.TemporaryFileUploadHandler", потому что мне не нужно создавать подкласс (пока), но я получаю следующую ошибку: You cannot set the upload handlers after the upload has been processed.

Вот мой кусок кода:

def home(request):
    request.upload_handlers = ["django.core.files.uploadhandler.TemporaryFileUploadHandler"]

    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            handle_uploaded_file(request.FILES['file'])
    else:
        form = UploadFileForm()
    return render(
        request,
        'app/index.html',
        {
            'title':'HOME',
            'form': form,
        }
    )

Что я делаю не так? Кроме того, я должен все же создать подкласс для пользовательского обработчика?

1 Ответ

0 голосов
/ 19 февраля 2020

проблема в том, что когда вызывается функция django, уже используется upload_handler, поэтому уже поздно ее менять.

Я помню, что вы можете изменить ее, если отключите csrf для функции. (Также см .: Где / как заменить обработчик загрузки по умолчанию в Django CBV? )

Другой возможностью было бы написание собственного обработчика загрузки или, возможно, промежуточного программного обеспечения, которое изменяет обработчик загрузки в зависимости от на пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...