link na stahovanie dokumentov

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

Ahojte,

ako, prosim vas, spravim link na stahovanie dokumentov. Teda ulozim na server nejake pdf-ko a cez link si ho mozu ludia stahovat … diky

Felix
Nette Core | 1186
+
+1
-

Muzes pouzit FileResponse

public function actionDownload($id) {
	// jaky, ktery, ci soubor
	$this->sendResponse(new FileResponse($filename));
}
Takeshi
Člen | 596
+
0
-

Felix napsal(a):

Muzes pouzit FileResponse

public function actionDownload($id) {
	// jaky, ktery, ci soubor
	$this->sendResponse(new FileResponse($filename));
}

Ak nežiadam veľa, mohol by si mi dať priklad? .. teda ako to čo si mi napísal mám aj použiť .. ako vykresliť … diky

Šaman
Člen | 2634
+
0
-

To nevykresluješ, to je normální akce presenteru, na kterou si uděláš odkaz n:href="Bla:download".

Oli
Člen | 1215
+
0
-

No nevím co na tom chceš za příklad. Prostě si někde v šabloně odkážeš řekněme na presenter Files, který má akci download

<a n:href="Files:download $id">stáhni soubor</a>

No a potom zavoláš to co ti psal už @Felix přičemž to $filename je celá cesta k souboru. Nic víc není potřeba. Tohle ti prostě pushne ten soubor do prohlížeče, jakože vynutí stáhnutí.

Takeshi
Člen | 596
+
0
-

No viem, ze je to pre niektorych lahke … ale ja si s tym neviem dat rady … proste mi to nefunguje … mam v Presenteru toto …

public function actionDownload($id) {
            // jaky, ktery, ci soubor
            $filename = 'subor.pdf';
            $this->sendResponse(new  FileResponse($filename));
        }

A v sablone …

<a n:href="Files:download 1">stáhni soubor</a>

namiesto $id som dal cislo 1, inak to vypisovalo, ze neznama premenna $id … …inak mi ako chybu vypisuje …

#error: Cannot load presenter 'Files', class 'App\Presenters\FilesPresenter' was not found in 'C:\Program Files (x86)\EasyPHP-12.1\www\test\app/presenters/FilesPresenter.php'.

ukazuje mi to tam, kde sa vklada url adresa

Šaman
Člen | 2634
+
0
-

??? Od někoho s 350 příspěvky bych takový dotaz nečekal. Tohle jsou naprosté základy ohledně tvoření odkazů, nastuduj si dokumentaci.

  1. id, pokud nepotřebuješ, vůbec v té action nemusí být
  2. asi špatný namespace, nebo jméno presenteru, nebo nevím co – tohle s downloadem vůbec nesouvisí
  3. soubor raději zadávej realtivně k nějakému známému místu – třeba presenteru __DIR__ . '/subor.pdf'
Takeshi
Člen | 596
+
0
-

Šaman napsal(a):

Mám síce cca. 350 príspevkov, ale s týmto som ešte nerobil.

btw … skúsil som všetko, čo ma napadlo, že by mohlo pomôcť, ale nič, stále nevie nájsť cestu k FileResponse. Môj posledný pokus vyzeral takto …

public function actionDownload() {
    $filename = 'subor.pdf';
    $this->sendResponse(new  Nette\Application\Responses\FileResponse($filename));
}

… ale nič sa neudialo. Mám vyriešené sťahovanie cez čisté PHP, ale chcel by som to urobiť v nette.

Michal Vyšinský
Člen | 608
+
0
-

@Takeshi a máš na začátku souboru use Nette?

Editoval Michal Vyšinský (11. 7. 2014 10:39)

Takeshi
Člen | 596
+
0
-

Michal Vyšinský napsal(a):

@Takeshi a máš na začátku souboru use Nette?

… radšej sem dám celý presenter … niečo je tam možno navyše

<?php

namespace App\Presenters;

use Nette,
	App\Model;
use Nette\Application\Responses;

class HomepagePresenter extends BasePresenter
{
	public function renderDefault()
	{

	}
        public function actionDownload() {
            // jaky, ktery, ci soubor
            $filename = 'subor.pdf';
            $this->sendResponse(new  Nette\Application\Responses\FileResponse($filename));
        }
}
Michal Vyšinský
Člen | 608
+
0
-

A jakou chybu ti to vyhazuje? Nemůže to najít třídu FileResponse nebo soubor ‚subor.pdf‘?

Editoval Michal Vyšinský (11. 7. 2014 10:47)

Takeshi
Člen | 596
+
+1
-

Michal Vyšinský napsal(a):

A jakou chybu ti to vyhazuje? Nemůže to najít třídu FileResponse nebo soubor ‚subor.pdf‘?

To prvé, teda nemôže nájsť triedu FileResponse

Michal Vyšinský
Člen | 608
+
0
-

Jakou máš verzi Nette? Když hledáš tu třídu ručně v IDE nebo filesystemu tak tam je?

Takeshi
Člen | 596
+
0
-

Stiahol som si ani nie pred týždňom poslednú verziu … keď ju hľadám ručne, tak presná cesta je nasledovná

vendor/nette/application/src/Application/Responses/FileResponse.php
Michal Vyšinský
Člen | 608
+
0
-

Hm. Divné…
Chybu to nezpůsobuje, ale díky tomu use Nette\Application\Responses můžeš použít jen Responses\FileResponse.

Ještě mě napadá: máš to instalované přes composer? Jestli ano, zkus spustit composer dump-autoload a také smazat cache…

Takeshi
Člen | 596
+
0
-

Bohužiaľ nie je mi jasné o čom hovoríš … a teda neviem ako sa inštaluje cez ten composer a ani ako spustiť dump-autoload … len zmazať cache ale to nič nerobí

Michal Vyšinský
Člen | 608
+
0
-

No když nevíš, jak se instaluje přes composer tak ho nepoužíváš :) Nemůžeš celý projekt hodit někam na github/bitbucket?

David Kudera
Člen | 455
+
0
-

Takže tuhle:

#error: Cannot load presenter 'Files', class 'App\Presenters\FilesPresenter' was not found in 'C:\Program Files (x86)\EasyPHP-12.1\www\test\app/presenters/FilesPresenter.php'.

chybu už ti to nedělá jo?

Editoval David Kudera (11. 7. 2014 11:10)

Takeshi
Člen | 596
+
0
-

David Kudera napsal(a):

Takže tuhle:

#error: Cannot load presenter 'Files', class 'App\Presenters\FilesPresenter' was not found in 'C:\Program Files (x86)\EasyPHP-12.1\www\test\app/presenters/FilesPresenter.php'.

chybu už ti to nedělá jo?

Práveže robí … v tom je problém, že nevie nájsť FileResponse … ako to vypisuje aj tam …

Takeshi
Člen | 596
+
0
-

Michal Vyšinský napsal(a):

No když nevíš, jak se instaluje přes composer tak ho nepoužíváš :) Nemůžeš celý projekt hodit někam na github/bitbucket?

Stiahnuť si môžeš celý project cez link http://ulozto.cz/…iahnutie-rar ale je tam len to co som tu napísal … teda ta funkcia a ten odkaz, tak neviem, či ti to pomôže

… a zmenil som tam len nazov stiahnutie pdf na txt …

Editoval Takeshi (11. 7. 2014 11:50)

Michal Vyšinský
Člen | 608
+
+2
-

Ach…

  1. composer používáš a ne že ne
  2. Chyba není v tom, že to nenajde FileResponse ale FilesPresenter!
  3. Když máš akci download v HomepagePresenteru, tak logicky nemůžeš odkaz mít jako Files:download. Neopisuj zdejší rady doslova. Jen se jimi řiď! Takže odkaz dej Homepage:download místo Files:download
  4. Ten soubor text.txt který chceš stáhnout nedávej do templates/Homepage ale jak už tu někdo psal, tak do nějaké určité složky a FileRepsonse správně nasměruj do té složky
  5. Příště když napíšu github/bitbucket tak nemyslím uložto – příště se na stahování zipu vykašlu…

Editoval Michal Vyšinský (11. 7. 2014 12:02)

Takeshi
Člen | 596
+
+1
-

Michal Vyšinský napsal(a):

Ach…

  1. composer používáš a ne že ne
  2. Chyba není v tom, že to nenajde FileResponse ale FilesPresenter!
  3. Když máš akci download v HomepagePresenteru, tak logicky nemůžeš odkaz mít jako Files:download. Neopisuj zdejší rady doslova. Jen se jimi řiď! Takže odkaz dej Homepage:download místo Files:download
  4. Ten soubor text.txt který chceš stáhnout nedávej do templates/Homepage ale jak už tu někdo psal, tak do nějaké určité složky a FileRepsonse správně nasměruj do té složky
  5. Příště když napíšu github/bitbucket tak nemyslím uložto – příště se na stahování zipu vykašlu…

Ďakujem za radu ! … s githubom nerobim, preto som to dal na ulozto … nemusel si to stahovat, ked ti to tak vadi …

Šaman
Člen | 2634
+
+2
-

@Takeshi: Ono to vadí více lidem, já bych to třeba nestahoval. Na githubu/bitbucketu se dostanu jediným klikem na zdrojáky i se zvýrazněnou syntaxí a najde se daleho víc lidí ochotných se na to podívat a hledat chybu.

A že jsi s tímhle zatím nedělal? Celou dobu tu ladíme jen odkaz na action, tedy nic co by souviselo se stahováním souboru.