2016-09-13 2 views
0

Я создаю сайт в Django на Pythonanywhere.com, и я использую облако памяти Backblaze для хранения всех статических и мультимедийных файлов. Мои css и изображения, которые я загрузил в Backblaze, работают, но я не могу понять, как все должно соответствовать друг другу, так что вот где я (минимализирован):Django загрузить изображение в cdn с помощью API

В этой модели я хочу сохранить уменьшенное изображение, У меня есть форма для загрузки.

class Post(models.Model): 
    (...) 
    thumbnail = models.ImageField(null=True, blank=True, width_field="width_field", height_field="height_field") 
    (...) 

Backblaze имеет весь код для запросов HTTP и ответы, которые мне нужны, так что я просто вставили, что в отдельном файле. Сначала мне нужно получить токен авторизации учетной записи, за которым следует URL-адрес для загрузки, а затем я могу отправить файл.

Таким образом, для всей функции в качестве входных данных нужны три вещи: дата файла, имя файла и размер файла. В качестве вывода я получаю идентификатор файла (и другие вещи, подробности here).

Теперь я задаюсь вопросом, где мне нужно вызвать эту функцию загрузки, я предполагаю, что она связана с параметром «upload_to» в ImageField. И мне интересно, что на самом деле хранится в ImageField, так как я не указываю ImageField место, где можно найти файл. Использует ли он корень носителя в файле настроек, как мне это сделать?

+0

Вы имеете в виду, что вы не хотите хранить изображения на диске в PythonAnywhere, но вместо этого хотите сохранить его в backblaze? Являются ли изображения тем, что ваши пользователи представляют? Или у вас есть предварительно загруженные изображения, которые вы хотите отобразить сейчас? – conrad

+0

Правильно, я хочу использовать Backblaze как CDN. У меня есть предварительно загруженные фотографии и файлы css/JavaScript, у меня есть те, кто работает. Теперь я действительно хочу, чтобы пользователи загружали изображения и хранили их. – Bob

+0

Проверьте django-хранилища. Он поддерживает большинство хранилищ (но не backblaze). Похоже, вам просто нужно реализовать методы чтения/записи/закрытия/размера для бэкэнд, и вам хорошо идти. Вы даже можете отправить запрос на получение, чтобы заставить их объединить его вверх! – conrad

ответ

0

Используя эти команды в настройках, вы можете установить MEDIA_URL, а также место, где должно храниться изображение. Здесь изображение хранится в ИПВ/media_cdn

MEDIA_URL = "/media/" 
MEDIA_ROOT = os.path.join(BASE_DIR, "media_cdn") 

Вы должны указать путь, где upload_to должен сохранить изображение внутри media_cdn иначе он будет сохранять изображение в media_cdn, если upload_to установлено значение Нет.

models.ImageField(upload_to='profiles/') 

Необходимо загрузить изображение. Таким образом, он содержит адрес, где изображение существует.

+0

Но я считаю, что я не могу просто позволить Django сохранить изображение в пути к файлу Backblaze. Мне нужно использовать API для этого? – Bob

+0

Я думаю, что у вас есть свое рабочее пространство, и вы можете делать что-нибудь внутри него, как героку, амазонку, лазурь и т. Д. Тем не менее, если вы не можете сделать это и имеете репозиторий github. Я хочу тебе помочь. – jainaman224