Как загрузить файлы в GAE через форму данных в Django? - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть Django веб-приложение, которое содержит метод в одной из моих моделей для загрузки выбранного пользователем файла (из формы) в указанную файловую директорию. Но я не могу использовать модель после того, как развернул свое приложение в Google App Engine (используя gcloud). Я использую Google MySQL db для моего приложения Django. Кроме того, я не могу использовать метод os.makedir () в своем приложении, поскольку сервер запрашивает разрешение только для чтения

MODELS.PY

def upload_to(instance, filename):
    now = timezone_now()
    base, ext = os.path.splitext(filename)
    ext = ext.lower()
    rootpath = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    return rootpath + f"/face_detector/static/face_detector/img/{now:%Y%m%d%H%M%S}{ext}"
    # Do add the date as it prevents the same file name from occuring twice
    # the ext is reserved for the file type and don't remove it


class PicUpClass(models.Model):
    picture = models.ImageField(_("picture"), upload_to=upload_to, blank=True, null=True)

ОШИБКА Я ПОЛУЧАЮ

OSError at / add-dataset [Errno 30] Файловая система только для чтения: '/ srv / face_detector / static / face_detector / img / 20200228084934 .jpg 'Метод запроса: URL запроса POST: https://agevent-269406.appspot.com/add-dataset Django Версия: 3.0.2 Тип исключения: OSError Значение исключения: [Errno 30] Файловая система только для чтения:' / srv / face_detector / static / face_detector / img / 20200228084934.jpg 'Расположение исключения: /env/lib/python3.7/site-packages/django/core/files/storage.py в _save, строка 267 Python Исполняемый файл: / env / bin / python3 .7 Python Версия: 3.7.6

Я ладья ie в python, поэтому, пожалуйста, предложите мне несколько базовых c решений.

1 Ответ

3 голосов
/ 28 февраля 2020

Причиной возникновения этой ошибки файловой системы только для чтения является то, что модели по умолчанию. ImageField сохраняет загруженные изображения в папку проекта, а только для чтения для приложений Google App Engine .

* 1004. * Вы должны использовать Google Cloud Storage для загрузки ваших изображений (лучший вариант, если это не временные данные), в противном случае для временных файлов вы можете записать их в каталог / tmp, который будет храниться в экземпляре . RAM , но будет удален, если вы удалите свой экземпляр, вы увеличите или уменьшите свой экземпляр или если для вашего экземпляра нет traffi c (users). Если вы используете ручное масштабирование, это не будет проблемой. Но для автоматизации c масштабирование директории tmp, как я уже говорил, рискованно.

Для директории tmp:

Вы можете установить rootpath = '/ tmp /'

Вы можете извлекать изображения из каталога tmp по коду в views.py для обслуживания их в HTML.

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