stažení souboru - přidání javascriptu do stránky   zodpovězená otázka

HTTP/HTML, JavaScript

Měl bych dotaz na stažení souboru. Mám web stránku, na které se vyplní údaje, podle nich se v databázi provede dotaz. Výsledek dotazu je zapsán do Excelu, který je uložen v souboru ~/Reports/(report+nějaké číslo).xls. Chtěl bych, aby se tento soubor následně stáhl (ukázala se nabídka „ulož jako“) a zároveň se stránka obnovila v nějakém rozumném stavu - např. s nápisem „Provedeno“. Předpokládám, že je to nutné udělat přidáním javascriptu do stránky - např.:

<script type="text/javascript">

setTimeout(window.open("http://localhost:1734/XXXX/Reports/(repo...ějaké číslo).xls","download"),500)

</script>

Bohužel ale netuším, jak přidat do stránky javascript v rámci nějaké události - v mém případě Button_Click.

Zkoušel jsem stažení souboru řešit i prostřednictvím Response.TransmitFile - dojde ke stažení souboru, ale stránka zůstane v původním stavu.

Javascript má ještě jednu nevýhodu - Firefox mi vesele nahlásí „Aplikace Firefox zabránila stránce otevřít vyskakovací okno“. Nabídne i možnost k pokračování, ale i tak je to trochu komplikace.

Chtěl bych poprosit o radu, jak řešit stáhnutí souboru nějakým elegantním způsobem. Předem moc děkuji za odpověď.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkuste se inspirovat následujícíim linkem ;) http://www.codeproject.com/KB/aspnet/Dow...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Skuste ...

<script type="text/javascript">

function Download_Click() {

var iframe = document.createElement("iframe");

iframe.src = "Report/Report.xls";

iframe.style.display = "none";

document.body.appendChild(iframe);

setTimeout("window.location.href = NovaURL", 3500)

}

</script>

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji za pomoc, tohle je perfektní. Na konec funkce, která generuje Excel jsem připojil:

Type csType = this.GetType();

String csName = "DownloadScript";

ClientScriptManager cs = Page.ClientScript;

if (!cs.IsStartupScriptRegistered(csType, csName))

{

StringBuilder csText = new StringBuilder();

csText.Append("<script type=\"text/javascript\">");

csText.Append("var iframe = document.createElement(\"iframe\");");

csText.Append("iframe.src = \"");

csText.Append(strFile.ToString());

csText.Append("\";");

csText.Append("iframe.style.display = \"none\";");

csText.Append("document.body.appendChild(iframe);");

csText.Append("setTimeout(\"window.location.href = ");

csText.Append(strFile.ToString());

csText.Append("\", 3500);");

csText.Append("</script>");

cs.RegisterClientScriptBlock(csType, csName, csText.ToString(), false);

}

Kde strFile je celá adresa souboru "http:\\....\xxx.xls".

Funguje to perfektně, jen netuším, co přesně dělají jednotlivé části toho javascriptu. Ale to je asi již na jiné povídání. :-)

Ještě jednou moc děkuji za rady.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Bohužel ale netuším, jak přidat do stránky javascript v rámci nějaké události - v mém případě Button_Click.

Ak máte v stránke asp:button tak ten má argument OnClientClick.Tam dajte volanie JS funkcie ktorá stiahne súbor.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To by bylo fajn, ale ten soubor je vytvářen právě tou funkcí Button_Click. Takže ve chvíli, kdy se kliká na button, ještě žádný soubor neexistuje. Ten se vytvoří na serveru až po odeslání stránky právě tím tlačítkem.

Já bych právě potřeboval, aby funkce button_click na svém konci, až bude jasné, že je soubor úspěšně vytvořen, vložila do stránky javascript na stáhnutí souboru.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak do JS dajte odkaz na .ashx handler , ktorý vytvorí súbor a pošle ho ako response. Alebo do button_click v code-behind dajte response.redirect("subor.txt").Taktiež môžete vytvoriť vlastnú komponentu, ktorá vyrenderuje <a> odkaz na súbor a v code-behind ju pridať do stránky, prípadne inak tam prihodiť kód, ktorý sa pošle na NOVÚ stránku.To, čo už je raz na klientovi zo serveru nezmeníte.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

response.redirect("subor.txt") - funguje na stažení souboru skvěle, ale nic neudělám s původní stránkou, na které je to tlačítko - ta zůstane zobrazená ve stavu kliku na tlačítko - tedy, jinak to neumím. :-(

Po stisku tlačítka a vytvoření souboru na serveru vložit do stránku odkaz na ten soubor umím, ale to beru až jako rozšíření pro ty, kteří mají zakázaný javascript.

Dokonce je tu i rada, co přesně do toho javascriptu napsat, ale buhužel tu není, jak ten javascript dostat do stránky - jen když ho tam potřebuji.

Přesně je to provedené takhle:

- uživatel na stránce vyplní data

- klikne na tlačítko

- na serveru: fukce button_click

{

- připojím se do DB a vytáhnu data

- vytvořím excel a uložím ho do ~/Reports/xxx.xls

!A tady potřebuji dát na stránku hlášku, že to proběhlo, případně tam přidat link na soubor a zároveň vložit do stránky javascript, který ten soubor stáhne (případně to stažení souboru udělat jakýmkoliv jiným, automatickým způsobem).

}

Pro uživatele to má vypadat takhle:

- vyplní na stránce údaje

- klikne na tlačítko

- ukáže se mu stránka, že je vše OK a navíc se mu nabídne okno "ulož jako".

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já bych to udělal například následovně.

Postisku tlačítka bych v code-behind vytvořeil blok try-catch ve kterém bych se připojil do DB,vytahl data a pokusil se je uložit na server ve formátu xls.V případě,že by se vše zdařilo přesměroval bych uživatele na připravenou stránku,která by dle předaného parametru(výsledek procesu se souborem) vypsala Succes/Failed a nabídla mi uživateli link anebo pop-up okno s nabídkou ke stažení souboru.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

1] po odeslani stranky s formularem vytvorite vas soubor xls

2] pokud je vporadku presmerujete na jinou jinou stranku treba ok.aspx pomoci respone.redirect a teto strance musite jeste predat cestu k stahovanemu souboru.

3] do ok.aspx si date vas text, vygenerujete javascript a spuste po dokonceni nacteni stranky.

treba <body onload="download_now()">

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback