2017-08-12 4 views
0

Je travaille sur un petit serveur python3 et je veux télécharger une base de données sqlite à partir de ce serveur. Mais quand j'ai essayé cela, j'ai découvert que le fichier téléchargé est plus grand que l'original: la taille du fichier original est 108K, la taille du fichier téléchargé est 247K. J'ai essayé cela plusieurs fois, et chaque fois j'ai eu le même résultat. J'ai également vérifié la somme avec sha256, qui ont des résultats différents.Fichier téléchargé plus grand que l'original

Voici mon fichier downloader.py:

import cgi 
import os 

print('Content-Type: application/octet-stream') 
print('Content-Disposition: attachment; filename="Library.db"\n') 

db = os.path.realpath('..') + '/Library.db' 
with open(db,'rb') as file: 
    print(file.read())

Merci à l'avance!

EDIT: Je essayé:
./downloader $> Taille de fichier fichier
est également 247K.

Répondre

0

Eh bien, j'ai enfin trouvé la solution. Le problème (que je n'ai pas vu d'abord) était que le serveur a envoyé du texte brut au client. Voici une façon d'envoyer des données binaires:

import cgi 
import os 
import shutil 
import sys 

print('Content-Type: application/octet-stream; file="Library.db"') 
print('Content-Disposition: attachment; filename="Library.db"\n') 

sys.stdout.flush() 
db = os.path.realpath('..') + '/Library.db' 
with open(db,'rb') as file: 
    shutil.copyfileobj(file, sys.stdout.buffer) 

Mais si quelqu'un a une meilleure syntaxe, je serais content de le voir! Je vous remercie !