Как получить доступ к полю тела запроса post, в котором хранится массив файлов, отправленных из postman на сервер Django?
Простите за громоздкий вопрос, но я отправляю четыре файла на сервер Django с помощью postman, и моя цель - получить доступ к каждому файлу и получить конкретную информацию о них, например, имя пути и размер файла.
Вот POST запрос на postman: post_req_postman
А вот как это выглядит, когда сервер получает запрос: request_printed_to_terminal
По сути, как показано на скриншоте и как я уже сказал, я хочу получить доступ к следующему массиву в поле files запроса:
[<InMemoryUploadedFile: Screen Shot 2022-09-11 at 10.14.05 PM.png (image/png)>, <InMemoryUploadedFile: Screen Shot 2022-09-11 at 10.14.04 PM.png (image/png)>, <InMemoryUploadedFile: Screen Shot 2022-09-11 at 10.13.51 PM.png (image/png)>, <InMemoryUploadedFile: Screen Shot 2022-09-11 at 10.13.48 PM.png (image/png)>]}
Вот соответствующий код Django, который обрабатывает загрузку файлов:
import io
import json
from operator import itemgetter
import os
from django.http import Http404,HttpResponse
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.parsers import JSONParser
from django.views.decorators.csrf import csrf_exempt
from google.cloud import storage
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/Users/gabrieltorion/downloads/filestoragehelpusdefend-3082732cedb4.json"
class uploadFiles(APIView):
payLoad = None
print("Will listen for new file uploads")
bucketMemoryMax = 400_000_000_000_00
@csrf_exempt
def post(self, request):
storageClient = storage.Client()
if request.data['name'] == 'uploadFiles':
print("request.data: ", request.data)
#the screen shots are in 'files'
businessId, files = itemgetter("businessId", "files")(request.data)
userBucket = storageClient.get_bucket(businessId)
currentMemoryStorage = 0
if userBucket:
blobs = storageClient.list_blobs(businessId)
if blobs:
for blob in blobs:
currentMemoryStorage+=blob.size
if currentMemoryStorage < self.bucketMemoryMax:
# Get the length of the files
pass
else:
return HttpResponse("Bucket is FULL. CANNOT UPLOAD FILES.", status=404)
return HttpResponse("Post request is received.")
Я попробовал следующее для доступа к файлам в теле почтового запроса:
print(files.file), но это дает мне только следующий объект io.BytesIO:<_io.BytesIO object at 0x10b33c590>print(files), но это дает мне только имя пути последнего файла в массиве Files тела запроса:Screen Shot 2022-09-11 at 10.13.48 PM.png
Что я делаю неправильно? Как мне получить доступ к файлам и узнать их имена?
Необходимо получить список файлов из объекта запроса с помощью request.FILES.getlist('<key>').
Ссылка : https://docs.djangoproject.com/en/4.1/topics/http/file-uploads/
Просто напишите request.data.getlist('имя_поля') для получения списка файлов.