Upload 100mb souboru přes ftp – problem/nevedomost browse tlacitkem – addUpload

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Fera
Člen | 22
+
0
-

Zdravím,
v nette dělám teprve chvíli a narazil jsem na takový malý problém. Potřebuji přes ftp nahrávat zip soubory velké asi 100mb na server. Myšlenka byla asi taková, že si přes nějaký „browse button“ vyberu soubor a poté až si nastavím cesty atd jej nahraju na server. Použil jsem na to komponentu $form->addUpload, jenže po odeslání formuláře, když si chci vypsat jméno/cestu vybraného souboru, abych jej poté přes ftp->put() mohl přenést se mi vypíše nějaký dočasný soubor ("C:\Program Files (x86)\xampp\tmp\phpBEFF.tmp "). Buď nevím jak si vytáhnout cestu k soubru a nebo mi uniká logika věci a používám nesprávnou komponentu. Rád bych Vás poprosil o radu, návod, nejraději však budu za krátký úsek kódu :)

// timto zpusobem se snazim vypsat si cestu – file1 = nazev komponenty „addUpload“
public function UploadFormSucceeded($form){

$values = $form->getValues();

if (isset($values[„file1“]))
echo $values[„file1“];
}

h4kuna
Backer | 740
+
0
-
<?php
isset($values['file1']) // je nesmysl vždy bude true
?>

Použij

<?php
if($values['file1']->isOk()) {
	dump($values['file1']); // toto je objekt FileUpload
}
?>

Viz Api FileUpload

Cestu k souboru získáš pomocí metody getTemporaryFile() nebo to rovnou přesun na požadované místo pomocí metody move().

<?php
$values['file1']->move($destination);
?>
Fera
Člen | 22
+
0
-

Děkuji za rychlou odpověď, to isset tam mám z toho důvodu:

$form = new Form;
for ($i = 1; $i < $models; $i++){
       $tmp = 'file'.$i;
       $form->addUpload($tmp, NULL, FALSE);
}

// Davam jakoby moznost pro upload max 4 souboru, a pokud v databazi uz ma nekdo 2 soubry nahrane, generuju // jen 2 buttony pro prochazeni souboru :)

Rád bych se ještě zeptal…jestli jsem to správně pochopil…getTemporaryFile() – tímto získám cestu k dočasnému souboru např. „C:\Program Files (x86)\xampp\tmp\phpBEFF.tmp“

$ftp->put($destination_file, $source_file, FTP_BINARY);
// podle meho bych tady ocekaval neco jako
$ftp->put($destination_file, C:\User\Public\Downloads\someZip.zip, FTP_BINARY);

ale mělo by být tedy možné i toto?

$ftp->put($destination_file, $values['file1']->getTemporaryFile(), FTP_BINARY);

a pote provest nejak move na ftpsserveru? To mi tak trošku vrtá ještě hlavou

h4kuna
Backer | 740
+
0
-

Ano takto to půjde.

<?php
$ftp->put($destination_file, $values['file1']->getTemporaryFile(), FTP_BINARY);
?>

To kam to umístíš na ftp je definováno $destination_file.

Editoval h4kuna (8. 5. 2015 10:49)