Правильный способ обработки файла из Django в Firebase Storage - PullRequest
0 голосов
/ 25 марта 2020

Я разрабатываю веб-приложение на Django, которое использует Firebase Storage в качестве хранилища мультимедиа. В настоящее время я настроил приложение для обработки сохраняемых файлов примерно так:

шаблон. html

<form enctype="multipart/form-data" method="post" action="{% my_view %}>
    {% csrf_token %}
    <input type="file" name="my_file">
    <input type="submit">
</form>

views.py

# All the imports...

cred = credentials.Certificate(os.path.join(settings.BASE_DIR, 'serviceAccountKey.json'))
initialize_app(cred, {
    'storageBucket': settings.FIREBASE_STORAGE_BUCKET})
bucket = storage.bucket()

def my_view(request):
    file = request.FILES['my_file']
    path = utils.handle_upload_file(file)
    blob = bucket.blob(blob_name=str(file))
    blob.upload_from_filename(path)
    # Other logic...
    return redirect('home')

utils.py

def handle_upload_file(file):
    path = os.path.join(settings.BASE_DIR, 'media', str(file))
    try:
        with open(path, 'wb+') as destination:
            for chunk in file.chunks():
                destination.write(chunk)
    except FileNotFoundError:
        os.mkdir('media')
        handle_upload_file(file)
    return path

Хорошо, позвольте мне разобрать это:

  1. Пользователь загружает файл

  2. Я получаю файл, обрабатываю и сохраняю его на своем сервере (с handle_upload_file method)

  3. Файл отправляется в Firebase Storage

  4. Пользователь перенаправляется на домашний вид.

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

Тем не менее, я попытался с помощью функции blob.upload_from_file избежать вышеупомянутого шага, и мне удалось сохранить его непосредственно в Firebase Storage, но он сохраняется в странный путь (application / octet-stream), поэтому я вернулся к своему предыдущему решению.

В любом случае, вы думаете, что способ, которым я сейчас занимаюсь, избыточен? Потому что я не знаю, но весь смысл использования Firebase должен заключаться в том, чтобы избежать необходимости сохранять вещи на вашем собственном сервере, верно?

Любое предложение будет любезно принято.

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