Uploadify – zpracování na straně serveru
- iwory
- Člen | 147
Zdravím, je možné nějak zpracovat soubory odesílané mimo
formulář?
Zkouším dát dohromady Uploadify a všechno ok. Akorát bych chtěl k datům
přistoupit pomocí nette.
Data odchytím pomocí
$form = new \Nette\Forms\Form();
$data = $form->getHttpData();
$data['Filedata']->name; // vyhodí název souboru
// kdyz se snazim pristoupit k temp datum, tak mi aplikace spadne.
$data['Filedata']->tmpName; // tady spadne
Je nějaká jiná možnost jak data zpracovávat?
Díky
- David Matějka
- Moderator | 6445
vyzadej si Nette\Http\IRequest
(v presenteru muzes klidne
$this->httpRequest
) a pomoci getFile
si ziskas
soubor, viz api
- iwory
- Člen | 147
matej21 napsal(a):
vyzadej si
Nette\Http\IRequest
(v presenteru muzes klidne$this->httpRequest
) a pomocigetFile
si ziskas soubor, viz api
Ano, zkusil jsme ale se stejným výsledkem:
$data = $this->getHttpRequest()->getFile('Filedata');
//vrátí
Nette\Http\FileUpload Object
(
[name:Nette\Http\FileUpload:private] => banner2.jpg
[type:Nette\Http\FileUpload:private] =>
[size:Nette\Http\FileUpload:private] => 155671
[tmpName:Nette\Http\FileUpload:private] => /tmp/php5/phpWMC59r
[error:Nette\Http\FileUpload:private] => 0
)
Ale když chci přistoupit k tmpName
$data->tmpName;
Tak opět spadne :-/
- iwory
- Člen | 147
matej21 napsal(a):
tak specifikuj, co to je „spadne“ :) hodi 500? ukaze nejakou chybu?
Pardon :)
Právě že povětšinou se vrátí prázná stránka (v konzol). V logu
nic.
Teď mi vyhodil:
Cannot read an undeclared property Nette\Http\FileUpload::$tmpName.
Při druhém pokusu zase bílo :)
- Oli
- Člen | 1215
@iwory Co prosím tě vracíš tomu uploadify js scriptu? Když jsem
to měl v uploadify.php souboru, tak to fungovalo, ale když jsem to přepsal
do komponenty, tak to funguje až na to, že uploadify si myslí, že ne. Tím
myslím, že se ten soubor nahraje na místo kam se nahrát má, ale pak mě
uploadify zařve a vrátí IO error #2038
.
V demo uploadify.php souboru bylo
if (in_array($fileParts['extension'],$fileTypes)) {
move_uploaded_file($tempFile,$targetFile);
echo '1';
} else {
echo 'Invalid file type.';
}
Z čehož jsem tak nějak vydedukoval, že by ten handler měl vrátit
echo '1'
, pokud se upload povedl. Je to tak? A jak ho vrátím?
Zkoušel jsem něco jako
if (in_array($fileParts['extension'],$fileTypes)) {
$data->move($targetFile);
return '1'; // zkoušel jsem i echo '1';
} else {
return 'Neplatný typ souboru.'; // i echo 'Neplatný typ souboru.';
}
$this->presenter->terminate();
Ale pořád stejnej výsledek IO error #2038
.
Díky.
- Oli
- Člen | 1215
Tak, kdyby to někdo někdy hledal, tak se má správně vracet plain/text, kterej se vrátí jako:
$this->presenter->sendResponse(new \Nette\Application\Responses\TextResponse('1'));
Jediné co nevím, kde se vypne debugBar. Někde jsem četl, že se to pro Nette 2.1 měnilo, ale teď to nemůžu nikde najít. neví někdo? Zkoušel jsem
\Nette\Diagnostics\Debugger::$bar = FALSE;
To ale vypne jen část debugbaru. Prozatímně to pro testování na localu řeším zapnutím produkčního režimu. :-|