Beitrag von S Fitzner (10 Beiträge) am Freitag, 8.Dezember.2006, 12:34.
Uploadproblem bei baseportal-Lizenzversion
Hallo Forum,
ich habe ein Problem beim UPLOAD von Dateien. Ich möchte in einer Kaufversion Dateien mittels FORM hochladen lassen. Diese Dateien soll ein baseportal-Script
annehmen und diese dann in Dateien auf dem Webserver ablegen.
Ich habe allerdings das Problem, das ich die Inhalte der hochgeladenen Datei nicht abgespeichert bekomme, meine erstellte Datei weisst lediglich den Inhalt auf den
ich zum testen in das Script fest codiert habe.
Wenn mir jemand weiterhelfen könnte... Ich wär sehr dankbar...
Sascha
#########################################################################################################
Formular das Werte an ein UPLOAD - Script übergeben soll...
<schnipp>
<FORM METHOD="POST" ACTION="http://www.xyz.de/cgi-bin/baseportal.pl?htx=/uploader" ENCTYPE="multipart/form-data" target="vorschaubild" name="vorschaubild">
<INPUT TYPE="hidden" NAME="mode=" value="binary">
<INPUT TYPE="file" NAME="uploaded_file=" SIZE=30 MAXLENGTH=80>
<TABLE BORDER=0>
<TR>
<TD style='font-family:Arial;color:#FFFFFF;font-size:10.0pt'>Speichern:</TD>
<TD style='font-family:Arial;color:#FFFFFF;font-size:10.0pt'><INPUT TYPE="radio" NAME="status=" checked value="write">wenn schon eine Datei besteht diese nicht überschreiben</TD>
</TR>
<TR>
<TD></TD>
<TD style='font-family:Arial;color:#FFFFFF;font-size:10.0pt'><INPUT TYPE="radio" NAME="status=" value="overwrite">
bestehende Datei überschreiben</TD>
</TR>
</TABLE>
<INPUT TYPE="submit" NAME="button" VALUE="Bild hochladen">
</FORM>
<schnapp>
#########################################################################################################
entsprechendendes UPLOAD - Template das die Werte annehmen soll um diese dann in eine Datei auf dem WEB-Server schreiben soll...
use CGI qw/:standard -private_tempfiles/;
$CGI::POST_MAX=1024 * 10000;
out "Bin drin<br>";
out $mode."<br>";
out $uploaded_file."<br>";
out $status."<br>";
$fh=upload($upload_file);
open (FILE,">/var/www/sascha1.jpg") or out ("Fehler Datei nicht gefunden: $!\n");
out "Bin im schreiben hier<br>";
binmode FILE;
binmode $fh;
print FILE "Das schreiben wir mal so schonmal rein um zu testen ob die Datei angelegt wird...";
while (read($fh,$buffer,1024))
close (FILE);
chmod (0666, "/var/www/sascha1.jpg");
#########################################################################################################
Ausgabe des UPLOAD - Template:
Bin drin
binary
v9_gleichen.jpg
write
Bin im schreiben hier
Ausgabe weiterhin von einer Datei auf dem Webserver, allerdings steht dort lediglich der Inhalt drin der hier im Script mittels PRINT
fest reingeschrieben wird, der Inhalt der übermittelten Datei fehlt.
Antworten
Beitrag von S Fitzner (10 Beiträge) am Freitag, 8.Dezember.2006, 15:16.
Re: Uploadproblem - Andere Variante aus OReilly funktioniert auch nicht
###################################################################
Absendetemplate: sender - Methode GET
###################################################################
<schnipp>
<FORM METHOD="GET" ACTION="http://www.xyz.de/cgi-bin/baseportal.pl?htx=/uploader1" ENCTYPE="multipart/form-data" target="vorschaubild" name="vorschaubild">
<input TYPE=HIDDEN NAME="htx" VALUE="/bildarchiv/uploader1">
<INPUT TYPE="file" NAME="datei" SIZE=30 MAXLENGTH=80><br>
<br>
<INPUT TYPE="submit" NAME="button" VALUE="Vorschaubild hochladen">
</FORM>
<schnapp>
###################################################################
Empfangstemplate: uploader1
###################################################################
use CGI;
$CGI::POST_MAX=1024 * 10000;
my $q = new CGI;
my $interndatei = $q->param("datei") || out "Keine Datei angekommen";
my $fh = $q->upload($interndatei);
out "Dateiname: ".$interndatei."<br>";
out "Filehandle: ".$fh."<br>";
$interndateiname =~s/([^\w.-])/_/g;
$interndateiname =~s/^[-.]+//;
open (FILE,">/var/www/sascha.jpg") or out ("Fehler Datei konnte nicht angelegt werden: $!\n");
binmode FILE;
binmode $fh;
print FILE "Das schreiben wir mal so schonmal rein um zu testen ob die Datei angelegt wird...";
while (read($fh,$buffer,1024))
{
print FILE $buffer;
}
close (FILE);
chmod (0666, "/var/www/sascha.jpg");
#############################################################################
Das kann doch eigentlich nicht so schwer sein....
Kann es sein das ich über baseportal keinen Zugriff auf die UPLOAD-Dateien bekomme,
ich diese im Template mittels upload nicht ansprechen kann ???
#############################################################################
Antworten
Beitrag von Pouraga (1396 Beiträge) am Freitag, 8.Dezember.2006, 18:52.
Re: Uploadproblem - Andere Variante aus OReilly funktioniert auch nicht
Baseportal mit paket cgi zu verwenden wird nicht funktionieren. baseportal interpretiert selbst den http post und schreibt enthaltene Dateien in das $_files_dir wenn dein Template ausgeführt wird ist der Buffer schon leer.
Schau mal in die einstellungen was als Verzeichniss für Dateien angegeben ist und dort wirst du alle Dateien finden.
p.s.: Dateiupload funktioniert generell nicht mit der methode get
Antworten
Beitrag von S Fitzner (10 Beiträge) am Sonntag, 10.Dezember.2006, 16:23.
Re: Uploadproblem - Andere Variante aus OReilly funktioniert auch nicht
So wie ich es jetzt verstanden habe kann ich zwar Dateien uploaden.... Habe aber selber im Baseportal-Template keinen Zugriff auf die upgeloadete Datei da baseportal.pl selber den Zugriff darauf hat...
Wenn ich es nun richtig verstanden habe stehen die Dateien im Upload-Verzeichnis (von baseportal)... habe leider momentan keine Chance das zu checken da ich nicht an den Server komme...
Also wenn die Dateien hochgeladen werden, und ich weiss das diese im Upload-Verzeichnis (von baseportal) landen... Dann kann ich diese von dort dahin verschieben wo ich sie benötige... das wär nicht das Thema...
Wichtig ist mir lediglich das ich diese via Template bearbeiten kann, hatte vorher ein pures CGI-Script dazu aber da nun Datenbankfunktionalitäten dazukommen muss es aus dem bp-Template passieren...
Vielleicht nochmal ein kurzes Kopfnicken dazu...
Thx
Sascha
Antworten
Beitrag von S Fitzner (10 Beiträge) am Montag, 11.Dezember.2006, 07:47.
Re: Uploadproblem - Andere Variante aus OReilly funktioniert auch nicht
erledigt...
Dateien sind im BP-FILES angekommen...
Thx
Sascha
Antworten
Beitrag von S Fitzner (10 Beiträge) am Montag, 11.Dezember.2006, 09:47.
LIZENZ: Uploadproblem - Upload Limit bei baseportal ??? @CB / Pouraga
Hallo,
ich habe es nun ja soweit hinbekommen das ich Dateien Uploaden kann und diese dann im bp-files Verzeichnis landen...
Nun habe ich die Situation das der Upload scheinbar nur bis 1 MB funktioniert. Dateien die grösser sind landen nicht auf dem Server...
Ich habe aus dem Ursprungsscript nun die folgenden Zeilen übernommen um zu versuchen mein Uploadlimit entsprechend zu erhöhen bzw. zu verringern, ohne Erfolg.
use CGI;
$CGI::POST_MAX=1024 * 20000;
..
..
Christoph, Denis, ist dieses 1 MB Limit irgendwo in baseportal gesetzt? Kann ich es steuern bzw. übersteuern? Gibt es vielleicht im Apache dazu eine globale Einstellung oder in irgendwelchen Config-Dateien die Perl sich zieht?
Bin ratlos...
I Need help. Die Dateien die Upgeloaded werden sollen sind Feinbilder, da komm ich mit 1 MB nicht weit...
Codeschnipsel anbei...
Danke
Sascha
use CGI;
$CGI::POST_MAX=1024 * 20000;
$baseDir = "/var/www/bp-files/";
$fh=$baseDir.$datei;
out "Datei auf Server: ".$fh."<br>";
###################################################################################################
open (FILE,">/var/www/bp-files/sascha1.jpg") or out ("Fehler Datei nicht gefunden: $!\n");
open (FILEIN,"<".$fh) or out ("Fehler: Datei $fh kann nicht geöffnet werden: $!");
binmode FILE;
binmode FILEIN;
while (read(FILEIN,$buffer,1024))
{
print FILE $buffer;
}
close (FILE);
close (FILEIN);
chmod (0666, "/var/www/bp-files/sascha1.jpg");
unlink $fh;
####################################################################################################
</perl>
<schnapp>
Antworten
Beitrag von S Fitzner (10 Beiträge) am Dienstag, 12.Dezember.2006, 08:29.
Re: LIZENZ: Uploadproblem - Upload Limit bei baseportal ??? @CB / Pouraga
*hochschieb*
Thx für Beachtung...
Sascha
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Dienstag, 12.Dezember.2006, 17:39.
Re: LIZENZ: Uploadproblem - Upload Limit bei baseportal ??? @CB / Pouraga
Das ist ein bekanntes Problem in Version 1 und 2. Du kannst, wenn es Dein eigener Server ist, im httpd.conf den Speicher und die Laufzeit erhöhen dann geht mehr... In Version 3 ist das Speicherproblem behoben, so dass man bei reinem Upload -zig MBs hochladen kann:
http://doku.baseportal.de/877.html#0
Antworten
Beitrag von S Fitzner (10 Beiträge) am Mittwoch, 13.Dezember.2006, 19:35.
Re: LIZENZ: Uploadproblem - Upload Limit bei baseportal 1 / 2 - Update auf 3@CB
Habe in der httpd.conf den Timeout hochgesetzt... War das einzigste was ich dazu finden konnte... Speichergrenzen sind dem Apache keine gesetzt... Ist ein eigener Server...
Wohlgemerkt es geht mir nicht um den Upload über den bp-Feldtyp Datei, sondern lediglich darum das ich im Script an eine Datei komme die aus einer Form gepostet wurde...
Wie komme ich an die 3 er Version? Gibt es einen Update / Upgradepreis?
Ich bin mir nicht ganz sicher, denke aber ich habe momentan die Version 1 als Lizenz...
Thx für Reply...
Sascha
Antworten
Beitrag von S Fitzner (10 Beiträge) am Freitag, 15.Dezember.2006, 11:58.
Re: LIZENZ: Uploadproblem - Upload Limit bei baseportal bei 1 MB - Workaround
Hallo Forum,
nachdem Christoph mir klar gemacht hat das der Dateiupload bei der Version 1 und 2 nur 1 MB beträgt habe ich mir dazu was einfallen lassen...
Ich rufe nun ein eigenes CGI-Script auf das mit Baseportal nichts zu tun hat... darin kann mittels
$CGI::POST_MAX=1024 * 100000;
Der Upload begrenzt werden bzw. unbegrenzt gestaltet werden...
Hierin verarbeite ich nun die Datei die mir aus der Form im meinem BP-Template übergeben wird... sprich ich empfange diese Parameter dort und verarbeite die hochgeladene Datei entsprechend...
Da ich ja im Anschluss die entsprechenden Informationen zu dieser Datei (wie z.B. Dateigrösse, Dateityp....) in meine BP-Datenbank geschrieben haben will muss ich also wieder in ein BP-Template kommen um Zugriff auf die bp-Datenbank zu haben...
Hierzu wird einfach eine Javascript-Weiterleitung mit den entsprechenden Parametern vorgenommen...
Aus meinem Perl-Script:
<schnipp>
my $filesize=sprintf "%d KB", (-s $filename)/1024;
print "<script language=\"JavaScript\" type=\"text/javascript\">\n";
print "neuesfenster=window.open(\"http://www.xyz.de/cgi-bin/baseport
al.pl?htx=/anwendung/uploader2&datei=".$dateiname."&sessionid=".$sessionid."&gr
oesse=".$filesize."\", \"_self\", \"\");\n";
print "</script>\n";
Somit ist die Kuh vom Eis... Der Weg ist nun
- von einem BP-Template -> ein eigenes CGI-Script um dort die Datei upzuloaden -> Weiterleitung in ein BP-Template mit Parameterübergabe aus dem CGI-Script.
Christoph sollest Du nochmal so eine Anfrage haben... Sobald jemand eigene CGI's erstellen kann gibt es hiermit eine Lösung das 1 MB Limit zu umgehen...
Gruss
Sascha
Antworten