Discussion:
[TYPO3-german] File upload in Extension
ReneŽ Kockisch
2009-01-10 08:07:22 UTC
Permalink
Hallo Liste,

ich versuche gerade ein recht einfache Erweiterung f?r Typo3 zu
schreiben in der eine CSV Datei hochgeladen wird, in den fileadmin
kopiert wird und anschlie?end ausgegeben wird. Mit der Ausgabe bin ich
schon fertig, die Daten aus der CSV werden in der Datenbank eingetragen
und tabelarisch und mit hilfe von flot als Diagramm angezeigt.

Nun wollte ich die CSV per Formular hochladen und kopieren, dazu habe
ich folgenden Code in meine Erweiterung geschrieben:

$content .= '<form action="index.php?id=8&mode=config&upload=file"
enctype="multipart/form-data" method="post">
<fieldset>
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
<input name="file" type="file" size="40" maxlength="100000" />
<input name="upload" type="submit" value="Hochladen" />
</fieldset>
</form>';
if($getVars[upload]=='file'){
print_r($_FILES);
move_uploaded_file($_FILES["tmp_name"],"/var/www/xyz/fileadmin/".$_FILES["tmp_name"]);
} ....

die print_r Funktion gibt mir das array korrekt zur?ck nur nach der
Ausf?hrung des Codes ist unter dem Pfad nix zu finden. Auch wenn ich ein
readfile($_FILES["tmp_name"]) ausf?hre wird nix ausgegeben. Unter
tmp_name des FILES Arrays wird /tmp/xyz ausgegeben, ich habe den Ordner
/tmp/ die Berechtigung gegeben das der User www-data lesen und schreiben
kann. Das die Datei da nicht drin bleibt wei? ich, da ja nach ausf?hrung
des Scripts die Temp Datei gel?scht wird, aber sie m?sste doch mit
readfile() ausgegeben werden....?

Was mach ich denn falsch???



Gru?
Ren?





-------------------------------------------------------------------
Kosys - Kockisch ITK Systems and Services
Inh. Kockisch Ren?

G?rlitzer Str. 22
03046 Cottbus

Tel.: 0355/ 430 903 81
Fax.: 0355/ 430 903 84


Internet: www.kosys-cottbus.de
E-Mail: rene-kockisch at kosys-cottbus.de
David Bruchmann
2009-01-10 08:40:14 UTC
Permalink
Hy Rene,

Die Datei wird hochgeladen, dann mu?t Du sie noch an einen anderen Ort
kopieren, weil sie anschlie?end wieder automatisch gel?scht wird.

Gru?
David

-----Urspr?ngliche Nachricht-----
Von: typo3-german-bounces at lists.netfielders.de
[mailto:typo3-german-bounces at lists.netfielders.de] Im Auftrag von Rene?
Kockisch
Gesendet: Samstag, 10. Januar 2009 09:07
An: typo3-german at lists.netfielders.de
Betreff: [TYPO3-german] File upload in Extension

Hallo Liste,

ich versuche gerade ein recht einfache Erweiterung f?r Typo3 zu
schreiben in der eine CSV Datei hochgeladen wird, in den fileadmin
kopiert wird und anschlie?end ausgegeben wird. Mit der Ausgabe bin ich
schon fertig, die Daten aus der CSV werden in der Datenbank eingetragen
und tabelarisch und mit hilfe von flot als Diagramm angezeigt.

Nun wollte ich die CSV per Formular hochladen und kopieren, dazu habe
ich folgenden Code in meine Erweiterung geschrieben:

$content .= '<form action="index.php?id=8&mode=config&upload=file"
enctype="multipart/form-data" method="post">
<fieldset>
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
<input name="file" type="file" size="40" maxlength="100000" />
<input name="upload" type="submit" value="Hochladen" />
</fieldset>
</form>';
if($getVars[upload]=='file'){
print_r($_FILES);
move_uploaded_file($_FILES["tmp_name"],"/var/www/xyz/fileadmin/".$_FILES["tm
p_name"]);
} ....

die print_r Funktion gibt mir das array korrekt zur?ck nur nach der
Ausf?hrung des Codes ist unter dem Pfad nix zu finden. Auch wenn ich ein
readfile($_FILES["tmp_name"]) ausf?hre wird nix ausgegeben. Unter
tmp_name des FILES Arrays wird /tmp/xyz ausgegeben, ich habe den Ordner
/tmp/ die Berechtigung gegeben das der User www-data lesen und schreiben
kann. Das die Datei da nicht drin bleibt wei? ich, da ja nach ausf?hrung
des Scripts die Temp Datei gel?scht wird, aber sie m?sste doch mit
readfile() ausgegeben werden....?

Was mach ich denn falsch???



Gru?
Ren?





-------------------------------------------------------------------
Kosys - Kockisch ITK Systems and Services
Inh. Kockisch Ren?

G?rlitzer Str. 22
03046 Cottbus

Tel.: 0355/ 430 903 81
Fax.: 0355/ 430 903 84


Internet: www.kosys-cottbus.de
E-Mail: rene-kockisch at kosys-cottbus.de
ReneŽ Kockisch
2009-01-10 09:39:52 UTC
Permalink
hallo david,

danke f?r deine antwort, das kopieren mache ich ja mit dem befehl:

move_uploaded_file($_FILES["tmp_name"],"/var/www/xyz/fileadmin/".$_FILES["tm
p_name"]);

aber da liegt am ende des scriptes nix??

Gru?
Ren?
David Zschille
2009-01-10 10:42:51 UTC
Permalink
Post by ReneŽ Kockisch
hallo david,
move_uploaded_file($_FILES["tmp_name"],"/var/www/xyz/fileadmin/".$_FILES["tm
p_name"]);
aber da liegt am ende des scriptes nix??
Hi Rene,

probier es mal mit

move_uploaded_file( $_FILES['file']["tmp_name"], "/var/www/xyz/fileadmin/" . $_FILES['file']["tmp_name"] );


Gr??e,
David
ReneŽ Kockisch
2009-01-10 16:01:48 UTC
Permalink
hallo david,

hab ich auch schon probiert hat aber leider nicht funktioniert. Hast du
noch ne andere Idee woran es liegen k?nnte? Wie gesagt wenn ich es mit
print_r anzeigen lasse, dann ist alles in dem Array gef?llt. Wie name,
gr??e typ und soweiter, error steht auch auf 0 also sollte es ja
geklappt haben, aber ich habe keine ahnung woran es scheitert.


Gru?
Ren?
Peter Russ
2009-01-10 12:50:49 UTC
Permalink
--- Original Nachricht ---
Absender: Rene? Kockisch
Post by ReneŽ Kockisch
Hallo Liste,
ich versuche gerade ein recht einfache Erweiterung f?r Typo3 zu
schreiben in der eine CSV Datei hochgeladen wird, in den fileadmin
kopiert wird und anschlie?end ausgegeben wird. Mit der Ausgabe bin ich
schon fertig, die Daten aus der CSV werden in der Datenbank eingetragen
und tabelarisch und mit hilfe von flot als Diagramm angezeigt.
Nun wollte ich die CSV per Formular hochladen und kopieren, dazu habe
$content .= '<form action="index.php?id=8&mode=config&upload=file"
enctype="multipart/form-data" method="post"> <fieldset>
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
<input name="file" type="file" size="40" maxlength="100000" />
<input name="upload" type="submit" value="Hochladen" />
</fieldset>
</form>';
if($getVars[upload]=='file'){
print_r($_FILES);
move_uploaded_file($_FILES["tmp_name"],"/var/www/xyz/fileadmin/".$_FILES["tmp_name"]);
} ....
die print_r Funktion gibt mir das array korrekt zur?ck nur nach der
Ausf?hrung des Codes ist unter dem Pfad nix zu finden. Auch wenn ich ein
readfile($_FILES["tmp_name"]) ausf?hre wird nix ausgegeben. Unter
tmp_name des FILES Arrays wird /tmp/xyz ausgegeben, ich habe den Ordner
/tmp/ die Berechtigung gegeben das der User www-data lesen und schreiben
kann. Das die Datei da nicht drin bleibt wei? ich, da ja nach ausf?hrung
des Scripts die Temp Datei gel?scht wird, aber sie m?sste doch mit
readfile() ausgegeben werden....?
Was mach ich denn falsch???
Gru?
Ren?
Grunds?tzlich solltest Du IMMER TYPO3-API-Funktionen verwenden. Was Du
machst ist 1) nicht flexibel und 2) "risky"

jm2c.

Peter-
--
Fiat lux!
Docendo discimus.
_____________________________
4Many? Services
XING: https://www.xing.com/go/invita/360052
http://www.xing.com/go/privatemessage/Peter_Russ
David Bruchmann
2009-01-10 16:23:19 UTC
Permalink
Hallo Ren?,


Nachfolgend habe ich mal ein Snippet, das bei mir funktioniert.
Kommentare lasse ich mal extra drin.
Wie der Array $_FILES sich zusammensetzt, geht aus dem Kommentar hervor, ist
aber abh?ngig davon wie das Formular die Daten ?bermittelt.

Am Besten als PHP abspeichern, dann kannst Du es im Editor besser ansehen.

Gru?
David

________________________

/*
$_FILES = ARRAY (
'tx_YOUR_EXTENSION_pi1' => ARRAY (
'name' => ARRAY ('image' =>
Array('0002210.JPG','0002210.JPG','0002210.JPG','0002210.JPG','0002210.JPG')
),
'type' => ARRAY ('image' =>
Array('image/jpeg','image/jpeg','image/jpeg','image/jpeg','image/jpeg')),
'tmp_name' => ARRAY ('image' =>
Array('N:\apache_2008\temp\php55.tmp','N:\apache_2008\temp\php55.tmp','N:\ap
ache_2008\temp\php55.tmp','N:\apache_2008\temp\php55.tmp','N:\apache_2008\te
mp\php55.tmp')),
'error' => ARRAY ('image' =>
Array('0','0','0','0','0'),
'size' => ARRAY ('image' =>
Array('28606','28606','28606','28606','28606'),
)
);
*/
$newData['images'] = array();
$emptyString = '';
for ($n=1;$n <= $this->maxImgAmount;$n++) {
$tmpImage = '';

$uploadedFileName = ($_FILES &&
$_FILES['tx_YOUR_EXTENSION_pi1']['tmp_name']['image'][$n]) ?
$_FILES['tx_YOUR_EXTENSION_pi1']['tmp_name']['image'][$n] : '';
if ($uploadedFileName) {

// upload to temp-file
$tmpName =
t3lib_div::upload_to_tempfile($uploadedFileName);

$this->fileFunc =
t3lib_div::makeInstance('t3lib_basicFileFunctions');
$this->include_filefunctions=1;

$tmpImage =
$_FILES['tx_YOUR_EXTENSION_pi1']['name']['image'][$n];

$tmpImage = str_replace ( ' ' , '_' ,
$tmpImage );
$tmpImage = str_replace ( ' ' , '__' ,
$tmpImage );
$tmpImage =
$this->fileFunc->cleanFileName($tmpImage,$this->charset);
#echo $tmpImage.'<br>';

// getting unique filename
$destination =
$this->fileFunc->getUniqueName($tmpImage, $this->uploadFolder,
$dontCheckForUnique=0);

// move file to file-directory
// should return a value, but it doesn't (at
least with windows)
$uploaded =
t3lib_div::upload_copy_move($tmpName,$destination);

// Extract filename from path
$imgArray = Array($destination);
$tmpImages =
t3lib_div::removePrefixPathFromList($imgArray,$this->uploadFolder);
$tmpImage = $tmpImages[0];
}

// commas are needed to find position of images when
some fields keep empty
// i.e. the first two images have landscape-format,
the rest has portrait-format
if ($tmpImage) {
if ($n <= $this->allowedLandscapeAmount) {
$newData['images'][0] .= ($n <
$this->allowedLandscapeAmount) ? $tmpImage.',' : $tmpImage;
}
else {
$newData['images'][1] .= ($n <
$this->maxImgAmount) ? $tmpImage.',' : $tmpImage;
}
}
else {
if ($n <= $this->allowedLandscapeAmount) {
$newData['images'][0] .= ($n <
$this->allowedLandscapeAmount) ? ',' : '';
}
else {
$newData['images'][1] .= ($n <
$this->maxImgAmount) ? ',' : '';
}
#$newData['image'] .= ($n <
$this->maxImgAmount) ? ',' : '';
}
#$emptyString[1] .= ($n < $this->maxImgAmount) ? ','
: '';
if ($n < $this->allowedLandscapeAmount) {
$emptyString[0] .= ',';
}
elseif ($n < $this->maxImgAmount) {
$emptyString[1] .= ',';
}
}

#$saveData['image'] = ($newData['image'] != $emptyString) ?
$newData['image'] : '';
$saveData['img_landscape'] = ($newData['image'][0] !=
$emptyString[0]) ? $newData['image'][0] : '';
$saveData['img_portrait'] = ($newData['image'][1] !=
$emptyString[1]) ? $newData['image'][1] : '';
#t3lib_div::debug($saveData);
________________________

-----Urspr?ngliche Nachricht-----
Von: typo3-german-bounces at lists.netfielders.de
[mailto:typo3-german-bounces at lists.netfielders.de] Im Auftrag von Rene?
Kockisch
Gesendet: Samstag, 10. Januar 2009 17:02
An: typo3-german at lists.netfielders.de
Betreff: Re: [TYPO3-german] File upload in Extension

hallo david,

hab ich auch schon probiert hat aber leider nicht funktioniert. Hast du
noch ne andere Idee woran es liegen k?nnte? Wie gesagt wenn ich es mit
print_r anzeigen lasse, dann ist alles in dem Array gef?llt. Wie name,
gr??e typ und soweiter, error steht auch auf 0 also sollte es ja
geklappt haben, aber ich habe keine ahnung woran es scheitert.


Gru?
Ren?

Lesen Sie weiter auf narkive:
Loading...