Upload

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Hanman
User
Beiträge: 48
Registriert: Mittwoch 31. März 2004, 12:24
Kontaktdaten:

Wenn ich die Daten mit .file hole, wird nur ein None übertragen. Kann das an der HTML Form liegen?

Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Auf jeden Fall, Dateien müssen immer per POST übertragen werden.
Hanman
User
Beiträge: 48
Registriert: Mittwoch 31. März 2004, 12:24
Kontaktdaten:

Wenn ich das Python Script nun per Post aufrufe, wird es nicht ausgeführt, Mozilla will es immer runterladen!

Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
Hanman
User
Beiträge: 48
Registriert: Mittwoch 31. März 2004, 12:24
Kontaktdaten:

Das Script wird jetzt wie von Wunderhand ausgeführt, allerdings wird bei manchen Dateien einfch mal rein Request gesendet, bei anderen schon und wenn kommt immer ein Fehler. Ich bin einfach mal so frei und poste den ganzen Quelltext + den Fehler :

Code: Alles auswählen

#!/usr/bin/python
import cgi
import ftplib
import os.path
import os
import cgitb
import PIL
cgitb.enable()
form = cgi.FieldStorage()
local = form["file"].value
local2 = form["file"].file
print "Content-Type : text/html"
print
print local2


#fsize = os.path.getsize(local)
#if fsize > 60000 :
    #print "Content-Type : text/html"
    #print
    #print 'The file is too big'

ending = os.path.splitext(local)
if ending[1] == '.jpeg' or '.jpg' or '.png' :
    dict = 'pics'
    list = os.listdir(dict)
    print list
    count = len(list)
    count = count + 1
    count = str(count)
    conn = ftplib.FTP('ftp-gateway.de','user','passwd')
    conn.cwd('/public_html/cgi-bin/pics/')
    serverf2 = count+'.pic'
    repl = path.replace('\\', os.sep)
    print '\n',form["file"].file
    conn.storbinary('STOR %s' % serverf2, open(local2, 'rb'))
    open(serverf2, 'r')
    local2.close()
else :
    print "Content-Type : text/html"
    print
    print 'JPEG and PNG only'

Und hier die Fehler :

Der kommt wenn ich local2 noch einmal in einen Sting Konvertiere (ist im Quelltext oben nicht drin) :
Traceback (most recent call last):
File "/home/w11865/.//web/public_html/cgi-bin/upload.py", line 36, in ?
conn.storbinary('STOR %s' % serverf2, open(local3, 'rb'))
IOError: [Errno 2] No such file or directory: "<open file '(fdopen)', mode 'w+b' at 0x82aa290>"
Der wenn ich einfach local2 nehme :
Traceback (most recent call last):
File "/home/w11865/.//web/public_html/cgi-bin/upload.py", line 36, in ?
conn.storbinary('STOR %s' % serverf2, open(local2, 'rb'))
TypeError: coercing to Unicode: need string or buffer, file found

Es tut mir wirklich leid das ich euch soviele Umstände bereite :( Ich bin selber am Verzweifeln

Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Ich schaus mir nachher mal an, mit dem vollem Quelltext ist das um ein vielfaches leichter. Eben hab ich gerade dein FTP-Passwort aus dem Script gelöscht !!! Sowas darfst du nicht ohne weiteres posten, wir können nicht garantieren wer das alles gesehen hat (in den 20 min zwar so gut wie keiner, aber man weiß nie).
Zuletzt geändert von Milan am Montag 2. August 2004, 12:46, insgesamt 1-mal geändert.
Hanman
User
Beiträge: 48
Registriert: Mittwoch 31. März 2004, 12:24
Kontaktdaten:

Oh ja danke. Habe ich total vergessen das da noch mein Passwort drin steht.
Es liegen kaum Dateien auf dem Space und ich habe kein Root zugriff, also kann man zum Glück nicht viel anstellen!
:)

Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Code: Alles auswählen

#!/usr/bin/python
import cgi
import ftplib
import os.path
import os
import cgitb
import PIL
cgitb.enable()
form = cgi.FieldStorage()
data_of_file = form["file"]
fileobj = form["file"].file
print "Content-Type : text/html"
print


#fsize = len(data_of_file.value)
#if fsize > 60000 :
    #print "Content-Type : text/html"
    #print
    #print 'The file is too big'

ending = os.path.splitext(data_of_file.filename)
if ending[1] in ('.jpeg', '.jpg', '.png'):
    dict = 'pics'
    list = os.listdir(dict)
    print list
    count = str(len(list) + 1)
    conn = ftplib.FTP('ftp-gateway.de','user','passwd')
    conn.cwd('/public_html/cgi-bin/pics/')
    serverf2 = count+'.pic'
    repl = path.replace('\\', os.sep)
    conn.storbinary('STOR %s' % serverf2, fileobj)
else :
    print "Content-Type : text/html"
    print
    print 'JPEG and PNG only'
Hi. Das ist die Grunderneuerte Form deines Programmes. Es waren mehr als nur ein Fehler drin und die haben alle gut zusammengespielt.
  • form["file"] beinhaltet eine Instanz von cgi.FieldStorage, in der alle Werte der hochgeladenen Datei gespeichert sind, so zum Beispiel den Dateinamen auf dem Clientrechner. Außerdem beinhaltet es die komplette Datei bereits in form["file"].file , sie muss also nicht noch geöffnet werden
  • Deine if-Abfrage ist zwecklos gewesen. form["file"].value enthält die komplette Datei und keinen Dateinamen. Trotzdem wird die Frage funktionieren, da or ".jpg" dasteht. ".jpg" ist ein nicht leerer String, also immer wahr, somit hätte man auch if True schreiben können.
  • Die print statements habe ich rausgenommen, da sie wahrscheinlich eh nicht das ausgeben, was du erwartet hast :wink:
  • Die Datei ist bereits als fileobjekt existent, muss bzw kann nicht mehr mit open erzeugt werden. Das hat hauptsächlich den Fehler ausgelöst.
  • Da sie entweder als StringIO buffer oder als Temporayfileobject vorliegt muss sie nicht geschlossen werden. Das erledigt Python am Ende des Scriptes selber. Es wäre aber kein Fehler das selbst zu tun.
So... ich hoffe du verstehst im Zusammenhang mit dem Code etwas :wink:, bei Fragen einfach posten.

hth, Milan
Hanman
User
Beiträge: 48
Registriert: Mittwoch 31. März 2004, 12:24
Kontaktdaten:

Da bin ich dir wirklich zu Dankbarkeit verpflichtet Milan. Funktionirt soweit alles wunderbar und ich verstehe auch alles!

Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
Hanman
User
Beiträge: 48
Registriert: Mittwoch 31. März 2004, 12:24
Kontaktdaten:

Eine Frage hätte ich da noch :
Ich möchte noch für jedes Bild ein Thumbnail erstellen, unter zu Hilfe nahme des Pil Moduls. Wenn ich am anfang nun PIL importtere kommt kein Fehler, wenn ich aber nun auf PIL Funktionen zugreifen will werden diese nicht gefunden. Ich hab einfach den PIL Ordner mit in das cgi-bin Verzeichnis gelegt und habe auch noch eine PIL.pth Datei hinzugefügt.

Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
Hanman
User
Beiträge: 48
Registriert: Mittwoch 31. März 2004, 12:24
Kontaktdaten:

so hat sich erledigt, pil kann ich wohl ohne weiteres nicht installieren :(

Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
Antworten