Google App Engine - ограничение загрузки файла - PullRequest
4 голосов
/ 05 июня 2011

Я бы хотел ограничить размер файла при загрузке в соответствии со следующими требованиями:

1- Клиентская сторона (это практически невозможно, если не используются клиентские плагины, такие как Flash или Applets), поэтому я отказываюсь от этого

2- Могу ли я узнать размер файла / изображения / видео на стороне сервера перед сохранением его в базе данных?

Спасибо!

Ответы [ 3 ]

6 голосов
/ 05 июня 2011

С помощью службы Blobstore в настоящее время нет возможности ограничить загрузку по размеру файла (открытый выпуск здесь ).
Хранение ваших данных с использованием простого BlobProperty, вы можете проверить размер большого двоичного объекта после загрузки с помощью len(uploaded_blob).

РЕДАКТИРОВАТЬ :
теперь это исправлено

2 голосов
/ 19 сентября 2013

С версии 1.5.4 create_upload_url принимает дополнительные необязательные аргументы, которые могут ограничивать размер загрузки

create_upload_url(success_path, max_bytes_per_blob=None, max_bytes_total=None, rpc=None, gs_bucket_name=None)

Насколько я понимаю, max_bytes_per_blob ограничивает размер каждого загружаемого файла, в то время как max_bytes_total ограничивает общий размер всех файлов, загруженных в одном запросе. Подробнее см. https://developers.google.com/appengine/docs/python/blobstore/functions

Например, чтобы ограничить размер загрузки до 5 МБ, назовите его так:

upload_url = blobstore.create_upload_url('/upload', max_bytes_total=5000000)

Если размер загрузки превышает лимит, возвращается HTTP-статус 413 (Request Entity Too Large). Если вам нужно, вы можете перехватить его в jQuery следующим образом:

    $("#file_form").ajaxForm({
        success : function(response) {
            ...
        },
        error : function(jqXHR, textStatus, errorThrown) {
            if (jqXHR.status == 413) {
                $("#error_message").text("Uploaded files should not be larger than 5MB");
            }
        }
    });
1 голос
/ 05 июня 2011

Если вы используете Blobstore Google (который вы, вероятно, будете использовать в App Engine), то я думаю, что у вас есть небольшие трудности.Поскольку в этом сообщении говорится , вы можете немедленно проверить Размер файла и удалить его, если он слишком большой.Возможно, с архитектурной точки зрения Google сложно предложить проверку в BlobStore перед сохранением данных.Я не знаю.

Возможно, вы хотите отметить проблему на Google App Engine Tracker .Неясно, используете ли вы Java или Python, но если вы посмотрите соответствующие Документы Google API, вы можете определить, как проверить размер записей BLOB-объектов.

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