2017-10-01 3 views
0

Je souhaite lire la taille d'un fichier avant de le télécharger sur S3 afin de vérifier s'il reste suffisamment de mémoire disponible. Le code suivant fonctionne. Cependant, le fichier est vide lorsqu'il est téléchargé sur S3. Si je supprime la partie qui vérifie la taille du fichier, il est téléchargé correctement. Existe-t-il un autre moyen d'obtenir la taille du fichier? Le fichier provient d'un formulaire de téléchargement d'une page HTML et je le télécharge directement sur S3 sans l'enregistrer d'abord sur le serveur.Le fichier est vide après avoir lu sa taille

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)) 

Répondre

2

bien sûr, que vous venez de seeked à la fin pour obtenir la taille, maintenant latestfile poignée position actuelle est « la fin du fichier ».

Il suffit de faire:

latestfile.seek(0) 

avant d'exécuter conn.upload_fileobj. Cela devrait fonctionner.

+0

Parfois, c'est si simple. Je vous remercie. – user3080315