2017-10-01 6 views
0

Ich möchte die Größe einer Datei vor dem Hochladen auf S3 lesen, um zu überprüfen, ob noch genügend Speicherplatz verfügbar ist. Der folgende Code funktioniert. Die Datei ist jedoch leer, wenn sie in S3 hochgeladen wird. Wenn ich den Teil lösche, der die Größe der Datei überprüft, wird sie korrekt hochgeladen. Gibt es eine andere Möglichkeit, die Dateigröße zu erhalten? Die Datei stammt aus einem Upload-Formular einer HTML-Seite und ich lade sie direkt auf S3 hoch, ohne sie vorher auf dem Server zu speichern.Die Datei ist nach dem Lesen der Größe leer

availablestorage = getavailablestorage() #gets the available storage in bytes 
latestfile = request.files['filetoupload'] #get the file from the HTML form 
latestfile.seek(0,2) 
latestsize = latestfile.tell() #this gets the size of the file 
if availablestorage < latestsize: 
    return "No space available. Delete files." 
bucketname = request.form.get('spaceforupload') 
conn = boto3.client('s3') 
conn.upload_fileobj(latestfile, bucketname, latestfile.filename) 
return redirect(url_for('showspace', spacename=bucketname)) 

Antwort

2

natürlich seeked Sie nur bis zum Ende der Größe zu bekommen, jetzt latestfile behandeln aktuelle Position „Ende der Datei“ ist.

Just do:

latestfile.seek(0) 

vor conn.upload_fileobj läuft. Das sollte funktionieren.

+0

Manchmal ist es so einfach. Vielen Dank. – user3080315

Verwandte Themen