Preluarea fișierului efectiv dintr-o solicitare http (pentru os.stat)

voturi
2

Aș dori să recuperez datele meta ale unui fișier încărcat folosind:

st = os.stat(file_path)

Cu toate acestea, nu sunt sigur cum să analizeze atributul file_path din cererea http. De exemplu, am folosit:

request.FILES

dar apoi obțineți:

TypeError: stat: path should be string, bytes, os.PathLike or integer, not MultiValueDict

De asemenea, serializez cererea, ca atare:

serializer = FileSerializer(data=request.data)

Cum pot primi fișierul încărcat efectiv în cerințele http?

Întrebat 04/05/2020 la 11:50
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
0

Deși este discutabil dacă acest lucru este corect să se facă în general înainte de a fi salvat fișierul în locația permanentă (este posibil să nu se aplice pentru stocarea în cloud etc), răspunsul este:

Când fișierul încărcat este stocat temporar de Django, fie în memorie (dacă este mic), fie pe discul cu manipulatoare de încărcare .

Toate UploadedFiles vor avea atribute precum dimensiunea , numele .

Dacă TemporaryFileUploadHandler a fost utilizat pentru a stoca fișierul - acest fișier în request.FILES va fi TemporaryUploadedFile și va avea temporary_file_path() metodă:

for f in request.FILES.getlist("file_field"):
    try:
        fstats = os.stat(f.temporary_file_path())
    except AttributeError:
        # do something
    # file processing logic
Publicat 06/05/2020 la 18:47
sursa de către utilizator

voturi
0

Pentru a prelua fișierul efectiv dintr-o solicitare http, puteți utiliza acest lucru:

if request.method == 'POST':
        uploaded_file = request.FILES['XYZ']
        fs = FileSystemStorage()
        server_file_name = fs.save(uploaded_file.name, uploaded_file)

unde XYZ este valoarea atributului de nume din eticheta de intrare. Asa:

<input type="file" name="XYZ" aria-label="Upload File" id="_upload_file">
Publicat 13/05/2020 la 00:18
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more