Avatar billede tmo1419 Nybegynder
23. oktober 2008 - 09:36 Der er 8 kommentarer og
1 løsning

Gem dynamisk genereret fil på browser klient PC

Hej

Jeg har et brugerønske om at en web-applikation dynamisk skal generere en tekstfil (på baggrund af valg foretaget af brugeren og systemet) og downloade denne til på brugerens pc ved aktivering af en knap. Filen skal gemmes i en mappe udpeget af brugeren. Formålet er at brugeren siden kan åbne filen i fx. Word eller Acrobat (formatet er endnu ukendt) og læse informationerne igen.

Kan man det eller er edt ikke muligt. Jeg mener ikke, at det er muligt/tilladt at gemme en fil på en klient pc via browser.
Avatar billede aaberg Nybegynder
23. oktober 2008 - 10:02 #1
Hvis jeg forstår dig korrekt, har du brug for en almindelig download mekanisme. Altså, at når brugeren trykker på en knap bliver filen dynamisk genereret, derefter får han den almindelige "Gem fil" dialogboks frem, hvor han bladre sig frem til mappen som filen skal gemmes i, trykker "Gem" og, walla!

Du skal bruge en Generic handler. Tryk "Add" -> "New Item" og vælg "Generic Handler" fra listen over filtyper. Herunder er der et eksempel på en Generic Handler der generere en tekst fil som indeholder teksten "Hello World", og sender den til browseren med filavnet test.txt

<%@ WebHandler Language="C#" Class="Handler3" %>

using System;
using System.Web;

public class Handler3 : IHttpHandler {
   
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        context.Response.AppendHeader("Content-Disposition", "attachment; filename=testfil.txt");
        context.Response.Write("Hello World");
    }

    public bool IsReusable {
        get {
            return false;
        }
    }
}
Avatar billede aaberg Nybegynder
23. oktober 2008 - 10:04 #2
For at tilføje et "download" link på din side, skal du bare linke til handleren. F.eks.

<a href="Handler3.ashx">Download</a>
Avatar billede tmo1419 Nybegynder
23. oktober 2008 - 10:41 #3
Tusind tak for svaret. Det ser ud til at virke. Må indrømme, at jeg ikke aner, hvad der sker i den Generic Handler, men det må jeg jo prøve at finde ud af. Anyway, jeg bukker og takker :-)

Skal også lige genopfriske hvordan det er at jeg overdrager point til dig...

/TMO
Avatar billede aaberg Nybegynder
23. oktober 2008 - 12:15 #4
Jeg skal lige lægge et svar først. Det kommer her :-)  Og så skal du vælge mit navn i listen til venstre, og trykke "Accepter svar".

Prøv at rode lidt med det. Hvis der dukker spørgsmål op undervejs, så skal du bare spørge :-)
Avatar billede tmo1419 Nybegynder
30. oktober 2008 - 13:39 #5
ert
Avatar billede tmo1419 Nybegynder
30. oktober 2008 - 13:46 #6
Hej
Det kan jeg godt få til at virke, men hvordan får jeg den teksten, der skal skrives i filen (variabel tekst) med over?

Man skal forestille sig, at der på en side er en tekst (dynamisk genereret på serveren og vist på browseren i HTML format). Jeg vil nu have den samme tekst uden HTML, men i "pæn" udgave, skrevet til en fil, som så kan gemmes på klienten.

Skrivning og gem til den fil skal trigges af et klik på en knap eller lign.

Forslag modtages.

Næste udfordring kommer
Avatar billede aaberg Nybegynder
30. oktober 2008 - 14:05 #7
Der er flere muligheder. Enten kan du gemme teksten i en Session variabel før der trykkes på knappen, og hente denne Session variabel op i Handleren.

Hvis du i udgangspunktet henter teksten fra en database, kan du hente den op fra databasen igen i handleren.

Hvis du dynamisk genererer teksten, kan du dynamisk genererer teksten med samme funktion i handleren.

Hvis du skal overfører en id til teksten til handleren, kan dette gøres via en almindelig querystring.
Avatar billede tmo1419 Nybegynder
30. oktober 2008 - 15:27 #8
tak - jeg føler mig lidt tumbet lige nu men får fejl.
Kan du hjælpe?

Her er 3 kodestumper som ikke spiller. Det giver fejl på runtime:

Kildekoder nedenfor....

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:


Line 26:            context.Response.AppendHeader("Content-Disposition", "attachment; filename=YouSee Registrering.txt");
Line 27:
Line 28:            string SavedInfo = (string)HttpContext.Current.Session["SaveInfo"];
Line 29:           
Line 30:            context.Response.Write(SavedInfo);


Source File: c:\Work\Workspace\asunet.webspeed.dk\tmoHandler.ashx    Line: 28



Kildekode for tmoHandler.ashx:

<%@ WebHandler Language="C#" Class="tmoHandler" %>


using System;
using System.Collections;
using System.ComponentModel;
using System.Web.SessionState;


    public class tmoHandler : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            context.Response.AppendHeader("Content-Disposition", "attachment; filename=Registrering.txt");

            string SavedInfo = (string)HttpContext.Current.Session["SaveInfo"];
           
            context.Response.Write(SavedInfo);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

    }



Kildekode for tmopage.aspx.cs:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.SessionState;


public partial class tmoPage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Session["SaveInfo"] = "Dette er min tekst, der er gemt i en sessionvariabel";
        HttpContext.Current.Session["SaveInfo"] = "Dette er min tekst, der er gemt i en sessionvariabel";
    }
}


Kildekode for tmopage.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="tmoPage.aspx.cs" Inherits="tmoPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <a href="tmoHandler.ashx?id=1">Download</a>
    </div>
    </form>
</body>
</html>
Avatar billede aaberg Nybegynder
30. oktober 2008 - 22:19 #9
Jeg kan ikke umiddelbart se fejlen. Det eneste råd jeg kan give, er at bruge debuggeren i visual studio. Sæt et par break points, og debug dig igennem koden. Når du har fundet ud af præcist hvilken variabel det er der ikke er sat til en instans af et objekt, så er du på sporet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester