2017-08-12 6 views
0

Ich arbeite an einem kleinen Python3-Server und ich möchte eine SQLite-Datenbank von diesem Server herunterladen. Aber als ich das versuchte, entdeckte ich, dass die heruntergeladene Datei größer als das Original ist: Die ursprüngliche Dateigröße ist 108 K, die heruntergeladene Dateigröße ist 247 K. Ich habe das viele Male versucht, und jedes Mal hatte ich das gleiche Ergebnis. Ich habe auch die Summe mit sha256 überprüft, die unterschiedliche Ergebnisse haben.Datei heruntergeladen größer als Original

Hier ist meine downloader.py Datei:

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

Vielen Dank im Voraus!

EDIT: habe ich versucht:
$ ./downloader> Datei
Datei Größe ist auch 247K.

Antwort

0

Nun, ich habe endlich die Lösung gefunden. Das Problem (das ich zuerst nicht sah) war, dass der Server reinen Text an den Client gesendet hat. Hier ist eine Möglichkeit, um Binärdaten zu senden:

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) 

Aber wenn jemand eine bessere Syntax hat, würde ich mich freuen, es zu sehen! Vielen Dank !

Verwandte Themen