2016-11-17 5 views
-1

Ich habe versucht, Datei-Download mit CGI, Es funktioniert gut excpt die heruntergeladene Datei hat den Namen der Python-Skript-Datei.Python CGI Filedownload Namensänderung

Mein Code:

#Source file name : download.py 
#HTTP Header 
fileName='downloadedFile' 
print "Content-Type:application/octet-stream; name=\"%s\"\r\n" %fileName; 
print "Content-Disposition: attachment; filename=\"%s\"\r\n\n" %fileName; 

data= '' 

try: 
    with open(fullPath,'rb') as fo: 
     data = fo.read(); 
    print data 
except Exception as e: 
    print "Content-type:text/html\r\n\r\n" 
    print '<br>Exception :' 
    print e 

Die Datei-Downloads mit einem Namen download.py statt downloadedFile. Wie kann ich den heruntergeladenen Dateinamen auf downloadedFile setzen?

Antwort

1

Haben Sie das aus PHP kopiert? (PHP verwendet ;, aber Python benötigt es nicht)

Sie haben zu viele \n. In Python fügt print\n automatisch hinzu.

Nach dem ersten Header (zuerst print) hatten Sie zwei \n\n (mit '\ n' von print hinzugefügt) so nach der Kopfzeile hatten Sie eine leere Zeile, die Ende der Header bedeutet. So wurde die zweite Zeile mit dem Namen nicht als Überschrift, sondern als Teil des Körpers behandelt.

#!/usr/bin/env python 

import os 
import sys 

fullpath = 'images/normal.png' 
filename = 'hello_world.png' 

print 'Content-Type: application/octet-stream; name="%s"' % filename 
print 'Content-Disposition: attachment; filename="%s"' % filename 
print "Content-Length: " + str(os.stat(fullpath).st_size) 
print # empty line between headers and body 
#sys.stdout.flush() 

try: 
    with open(fullpath, 'rb') as fo: 
     print fo.read() 
except Exception as e: 
    print 'Content-type:text/html' 
    print # empty line between headers and body 
    print 'Exception :', e 
+0

Vielen Dank Faras :) – Kajal