Я разрабатываю веб-приложение на 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
Хорошо, позвольте мне разобрать это:
Пользователь загружает файл
Я получаю файл, обрабатываю и сохраняю его на своем сервере (с handle_upload_file method
)
Файл отправляется в Firebase Storage
Пользователь перенаправляется на домашний вид.
Теперь, даже если он работает должным образом, я чувствую, что делаю ненужный шаг когда я сохраняю его на своем сервере.
Тем не менее, я попытался с помощью функции blob.upload_from_file
избежать вышеупомянутого шага, и мне удалось сохранить его непосредственно в Firebase Storage, но он сохраняется в странный путь (application / octet-stream), поэтому я вернулся к своему предыдущему решению.
В любом случае, вы думаете, что способ, которым я сейчас занимаюсь, избыточен? Потому что я не знаю, но весь смысл использования Firebase должен заключаться в том, чтобы избежать необходимости сохранять вещи на вашем собственном сервере, верно?
Любое предложение будет любезно принято.