Hallo,
ich möchte ein kleines Uploadscript coden. Ich möchte jenes auf einem linux Server laufen lassen, realisieren möchte ich es mit Hilfe der ftplib und cgi. Allerdings frage ich mich ob Python an dieser Stelle auf den Rechner des Nutzers oder den Server zugreifft :
conn.storbinary('STOR datei',open('datei','rb'),1024)
Ausserdem frage ich mich ob ich das open(datei... auslagern könnte um dann die Datei größe zu überprüfen und ob ich vor oder während des Transfers den Dateinamen ändern kann.
Nochmal ein wenig Off Topic :
Ich wollte mich, nachdem ich nun einige Zeit dieses Forum nutze, bei den Python Profis bedanken, die mir schon oft aus der Patche zu helfen wussten. Danke!
Gruß Hanman
Upload
'Ich liebe es wenn ein Plan funktioniert'
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Hanman,
erstmal nach Netzwerke und CGI verschieben *schieb*
Das auslagern von open kannst z.B. so machen:
Dabei wird der Datei auf dem Server auch gleich ein anderer Name verpasst.
Gruß
Dookie
erstmal nach Netzwerke und CGI verschieben *schieb*
In dem Fall auf beide, das conn.storbinary sendet an den ftp-server das Kommando und open('datei','rb') öffnet die Datei auf dem Client.ich möchte ein kleines Uploadscript coden. Ich möchte jenes auf einem linux Server laufen lassen, realisieren möchte ich es mit Hilfe der ftplib und cgi. Allerdings frage ich mich ob Python an dieser Stelle auf den Rechner des Nutzers oder den Server zugreifft :Code: Alles auswählen
conn.storbinary('STOR datei',open('datei','rb'),1024)
Das auslagern von open kannst z.B. so machen:
Code: Alles auswählen
localfilename = 'datei'
serverfilename = 'uploaded'
datei = open(localfilename, 'rb')
conn.storbinary('STOR %s' % serverfilename, datei, 1024)
datei = close()
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
Hallo, erstmal danke Dookie! Ich habe das ganze jetzt versucht, leider klappt es noch nicht ganz so wie es eigentlich sollte. Ich hole das Bild, das der Benutzer hochladen möchte, über so ein Eingabefeld mit Dateiauswahl. Leider wird anscheinend nur der Dateiname übertragen und nicht der ganze Pfad. Wenn ich einfach o = open("pfad") benutze, also gleich den Pfad zu einem Bild eingebe versucht Python immer das Bild auf dem Server zu öffnen.
Das ist der Fehler :
Traceback (most recent call last):
File "/home/w11865/.//web/public_html/cgi-bin/upload.py", line 31, in ?
o = open(local, 'rb')
IOError: [Errno 2] No such file or directory: 'Winter.jpg'
Gruß Hanman[/quote]
Das ist der Fehler :
Traceback (most recent call last):
File "/home/w11865/.//web/public_html/cgi-bin/upload.py", line 31, in ?
o = open(local, 'rb')
IOError: [Errno 2] No such file or directory: 'Winter.jpg'
Gruß Hanman[/quote]
'Ich liebe es wenn ein Plan funktioniert'
So, das Problem habe ich gelöst. Leider kommt jetzt dieser Fehler :
Das ist der Code :Traceback (most recent call last):
File "/home/w11865/.//web/public_html/cgi-bin/upload.py", line 33, in ?
conn.storbinary('STOR %s' % serverf, o , 1024)
File "/usr/lib/python2.2/ftplib.py", line 418, in storbinary
buf = fp.read(blocksize)
IOError: [Errno 9] Bad file descriptor
Code: Alles auswählen
if ending[1] == '.jpeg' or '.jpg' or '.png' :
dict = 'pics/'
list = os.listdir(dict)
count = len(list)
count = count + 1
count = str(count)
conn = ftplib.FTP('ftp-gateway.de','blah','blah')
serverf = 'b'+str(count)+str(ending)
serverf2 = count+'.pic'
o = open(local, 'w'))
conn.storbinary('STOR %s' % serverf, o , 1024)
o.close()
'Ich liebe es wenn ein Plan funktioniert'
Hi. Das wundert mich auch nicht sonderlich ... Du willst eine Datei auf dem Server speichern lassen (wohlgemerkt binär), die du lokal zum schreiben geöffnet hast (und das im ascii-mode). Du gibts also dem Server keine Daten sondern erwartest welche von ihm, logisch dass er sich beschwert. Die Datei muss schon im Modus "binäres lesen" geöffnet werden "rb".
mfg Milan
mfg Milan
Danke Milan, der Fehler ist nun erstmal weg, doch Python scheint immer noch nicht auf den Rechner des Clients zuzugreifen sondern auf den Server. Ich bin da jetzt langsam am verzweifeln!
Gruß Hanman
Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
Ich lasse das Script auf einem Linux Server laufen. Kann es sein das Probleme mit der Form des Pfades gibt. Momentan sieht diese wie folgt aus :
Ich habe noch ein Problem :
Wenn ich eine Input Form mit dem Typ "file" (es wird ein Dateiauswahlmenü geöffnet) erstelle und essen Inhalt per CGI auslese wird nur der Dateiname ausgelesen der pfad allerdings nicht!
Gruß Hanman
Wenn ich eine Datei mit dem Pfadnamen erstellen gibt es keinen Fehler.C:\Dokumente und Einstellungen\All Users\Dokumente\Eigene Bilder\Beispielbilder\Wasserlilien.jpg
Ich habe noch ein Problem :
Wenn ich eine Input Form mit dem Typ "file" (es wird ein Dateiauswahlmenü geöffnet) erstelle und essen Inhalt per CGI auslese wird nur der Dateiname ausgelesen der pfad allerdings nicht!
Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Hanman,
hat Dein Formular auch den Richtigen enctype in form von
Gruß
Dookie
hat Dein Formular auch den Richtigen enctype in form von
Code: Alles auswählen
<form action="uploadscript.py" enctype="multipart/form-data">
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
Ich hab aus deinem Code einfach mal das os.sep übernommen. Allerdings konnte ich nirgends finden wo du die Datei des Clients öffnest!
Kann das Problem vielleicht mit meinem Router zusammenhängen!
Gruß Hanman
Kann das Problem vielleicht mit meinem Router zusammenhängen!
Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Hanman,
Die Dateien des Klients kannst vom Server aus nicht öffnen, dafür ist das Clientprogramm (Browser) zuständig, Das schickt dann die Daten als Multipart an den Server.
Gruß
Dookie
Die Dateien des Klients kannst vom Server aus nicht öffnen, dafür ist das Clientprogramm (Browser) zuständig, Das schickt dann die Daten als Multipart an den Server.
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
Ich häng einfach nochmal den Python und HTML Code dran. Ich denke eignetlich das darin alles stimmen müsste :
HTML
Upload :
Holt die Daten :
Ich denke mal das dann am letzten Code Stück was falsch ist. Ich habe es schon ohne .value probiert, das hat mich aber auch nicht viel weiter gebracht.
Gruß Hanman
HTML
Code: Alles auswählen
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Unbenanntes Dokument</title>
</head>
<body>
<form action="/cgi-bin/upload.py" method="get" enctype="multipart/form-data" name="form1">
<p>
<input type="file" name="file">
</p>
<p>
<input type="submit" name="Submit" value="Senden">
</p>
</form>
</body>
</html>
Code: Alles auswählen
path = 'C:\Dokumente und Einstellungen\All Users\Dokumente\Eigene Bilder\Beispielbilder\Wasserlilien.jpg'
repl = path.replace('\\', os.sep)
print path, repl, os.sep
conn.storbinary('STOR %s' % serverf2, open(repl, 'rb'))
Code: Alles auswählen
form = cgi.FieldStorage()
local = form["file"].value
Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
Sieht für mich jetzt nicht falsch aus, aber versuch doch einfach mal mir "print form" zu schauen, ob denn die Informationen da sind...Hanman hat geschrieben:Code: Alles auswählen
form = cgi.FieldStorage() local = form["file"].value
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
hmm für mich schaut der Upload-Teil etwas seltsam aus.
da sollte doch ein
eher zum Erfolg führen.
Gruß
Dookie
da sollte doch ein
Code: Alles auswählen
conn.storbinary('STOR %s' % serverf2, form["file"].file)
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
Wenn ich die Daten mit .file hole, wird nur ein None übertragen. Kann das an der HTML Form liegen?
Gruß Hanman
Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
Wenn ich das Python Script nun per Post aufrufe, wird es nicht ausgeführt, Mozilla will es immer runterladen!
Gruß Hanman
Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
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 :
Und hier die Fehler :
Der kommt wenn ich local2 noch einmal in einen Sting Konvertiere (ist im Quelltext oben nicht drin) :
Es tut mir wirklich leid das ich euch soviele Umstände bereite Ich bin selber am Verzweifeln
Gruß Hanman
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) :
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(local3, 'rb'))
IOError: [Errno 2] No such file or directory: "<open file '(fdopen)', mode 'w+b' at 0x82aa290>"
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'
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.