Ανάκτηση του πραγματικού αρχείου από ένα αίτημα http (για os.stat)

ψήφοι
2

Θα ήθελα να ανακτήσω τα μετα-δεδομένα ενός μεταφορτωμένου αρχείου χρησιμοποιώντας:

st = os.stat(file_path)

Ωστόσο, δεν είμαι σίγουρος πώς να αναλύσω το χαρακτηριστικό file_path από το αίτημα http. Για παράδειγμα, έχω χρησιμοποιήσει:

request.FILES

αλλά μετά πάρτε:

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

Επίσης κάνω σειριοποίηση του αιτήματος, όπως:

serializer = FileSerializer(data=request.data)

Πώς μπορώ να λάβω το πραγματικό μεταφορτωμένο αρχείο στα αιτήματα http;

Δημοσιεύθηκε 04/05/2020 στις 11:50
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
0

Ενώ είναι αμφισβητήσιμο εάν αυτό είναι σωστό να κάνουμε γενικά πριν το αρχείο__ αποθηκευτεί σε μόνιμη τοποθεσία (ενδέχεται να μην ισχύει για αποθήκευση cloud κ.λπ.), η απάντηση είναι:

Όταν το μεταφορτωμένο αρχείο αποθηκεύεται προσωρινά από το Django είτε στη μνήμη (αν είναι μικρό) είτε σε δίσκο με χειριστές μεταφόρτωσης .

Όλα τα UploadedFiles θα έχουν χαρακτηριστικά όπως μέγεθος , όνομα .

Αν το TemporaryFileUploadHandler χρησιμοποιήθηκε για την αποθήκευση του αρχείου - αυτό το αρχείο στο request.FILES θα είναι TemporaryUploadedFile και θα έχει temporary_file_path() μέθοδος:

for f in request.FILES.getlist("file_field"):
    try:
        fstats = os.stat(f.temporary_file_path())
    except AttributeError:
        # do something
    # file processing logic
Απαντήθηκε 06/05/2020 στις 18:47
πηγή χρήστη

ψήφοι
0

Για να ανακτήσετε το πραγματικό αρχείο από ένα αίτημα http, μπορείτε να το χρησιμοποιήσετε:

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

όπου XYZ είναι η τιμή του χαρακτηριστικού name στην ετικέτα εισαγωγής. Σαν αυτό:

<input type="file" name="XYZ" aria-label="Upload File" id="_upload_file">
Απαντήθηκε 13/05/2020 στις 00:18
πηγή χρήστη

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