Uploadify – zpracování na straně serveru

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

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

Jan Suchánek
Člen | 404
+
0
-

Neni lepsi pouzit xhr + nette.ajax.js?

David Matějka
Moderator | 6445
+
0
-

vyzadej si Nette\Http\IRequest (v presenteru muzes klidne $this->httpRequest) a pomoci getFile si ziskas soubor, viz api

iwory
Člen | 147
+
0
-

matej21 napsal(a):

vyzadej si Nette\Http\IRequest (v presenteru muzes klidne $this->httpRequest) a pomoci getFile 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 :-/

David Matějka
Moderator | 6445
+
0
-

tak specifikuj, co to je „spadne“ :) hodi 500? ukaze nejakou chybu?

iwory
Člen | 147
+
0
-

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 :)

David Matějka
Moderator | 6445
+
0
-

viz api, getTemporaryFile, tedy ->temporaryFile

iwory
Člen | 147
+
0
-

matej21 napsal(a):

viz api, getTemporaryFile, tedy ->temporaryFile

:-D Už mlčím a raději pořádně čtu…

Díky moc

Oli
Člen | 1215
+
0
-

@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
+
0
-

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. :-|