Generaattori + save as

Heippa!

Olen suunnittelemassa webbisivua, jossa oleva nappula laukaisee java-servletin, joka generoi tekstiä http-postissa tulleiden parametrien mukaisesti. Tähän asti helppoa.

Mutta miten saan generoidun tekstin talletettua käyttäjän koneelle tiedostoksi? Siis siten, että selain tarjoaisi save as -dialogin ja tarjoaisi käyttäjälle mahdollisuutta tallentamiseen.

En keksi mistä pitäisi lähteä liikkeelle. Onko generoitu teksti pakko tallettaa ensin serverillä tiedostoksi ja tehdä sitten linkki siihen, vai onko fiksumpaa tapaa toteuttaa asia?

Kiitos etukäteen!
6287
Äänestä

Muut lukivat myös

Vastaukset 6

Vanhimmat

No siis koodia en osaa antaa mutta sinun on kerrottava vastapuolen selaimelle sivun Headerilla että tulossa olisi tekstidokumentti/ladattavaa materiaalia.

Headerin lähettämisen jälkeen sinun ei tarvi luoda oikeasti tiedostoa vaan voit tunkea sen datana suoraan käyttäjän selaimeen.

Tarkan tekniikan joudut selvittämään itse, mutta näin se oikeasti sitten tapahtuu.

Ilmeisesti helpointa olisi se että sivulle generoituu uuden ikkunan avautuminen redirectillä ja linkityksen sisältönä on erillinen sivu/parametrit joilla headeriksi muutetaan tiedoston lähetys.

Äänestä
  • Kiitos avustasi!

    Se header on sinänsä helppo laittaa (mitähän siinä muuten pitää lukea), mutta mihin väliin mä sen datan sitten laitan?

    Äänestä

  • Jamputin kirjoitti:

    Kiitos avustasi!

    Se header on sinänsä helppo laittaa (mitähän siinä muuten pitää lukea), mutta mihin väliin mä sen datan sitten laitan?

    //tää vaikka servletin doGETtiin

    ServletOutputStream out = response.getOutputStream();

    // MIME type riippuen sun tiedostosta
    res.setContentType( "application/pdf" );

    res.setHeader("Content-disposition",
    "attachment; filename="
    "Example.pdf" );

    //luodaan puskuroitu outputstream vastauksen //streamiin

    BufferedOutputStream bos = new BufferedOutputStream(out);

    //sitten kirjotat bos.write() metodilla bytejä ja //kun oot tarpeeksi kirjottanu niin

    bos.flush();
    bos.close();
    out.close();

    Äänestä

  • Piru kirjoitti:

    //tää vaikka servletin doGETtiin

    ServletOutputStream out = response.getOutputStream();

    // MIME type riippuen sun tiedostosta
    res.setContentType( "application/pdf" );

    res.setHeader("Content-disposition",
    "attachment; filename="
    "Example.pdf" );

    //luodaan puskuroitu outputstream vastauksen //streamiin

    BufferedOutputStream bos = new BufferedOutputStream(out);

    //sitten kirjotat bos.write() metodilla bytejä ja //kun oot tarpeeksi kirjottanu niin

    bos.flush();
    bos.close();
    out.close();

    Täytyy koettaa, kiitos paljon avusta!

    Äänestä

  • Piru kirjoitti:

    //tää vaikka servletin doGETtiin

    ServletOutputStream out = response.getOutputStream();

    // MIME type riippuen sun tiedostosta
    res.setContentType( "application/pdf" );

    res.setHeader("Content-disposition",
    "attachment; filename="
    "Example.pdf" );

    //luodaan puskuroitu outputstream vastauksen //streamiin

    BufferedOutputStream bos = new BufferedOutputStream(out);

    //sitten kirjotat bos.write() metodilla bytejä ja //kun oot tarpeeksi kirjottanu niin

    bos.flush();
    bos.close();
    out.close();

    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Composite;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.MediaTracker;
    import java.awt.Toolkit;
    import java.awt.geom.AffineTransform;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.URL;
    import java.util.Random;

    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;

    public class DynPic extends HttpServlet {


       /**
        * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest, HttpServletResponse)
        */
       protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
          throws ServletException, IOException {
          doPost(arg0,arg1);   
       }
       
       /**
        * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest, HttpServletResponse)
        */
       protected void doPost(HttpServletRequest req, HttpServletResponse resp)
          throws ServletException, IOException {
          
          //haetaan pyynnöstä parametri "action"
                
          String parametri = req.getParameter("action");
          

       try
       {
          //Jos action on null, niin kutsutaan itseä uudestaan ja oikealla parametrilla

          if(parametri == null)
          {
             PrintWriter out = resp.getWriter();
             
             out.println("");   
             out.println("");   
             out.println("");   
             out.println("");   
             out.println("");   
          }
          
          //Jos on kutsuttu parametrillä "action=createimage", niin luodaan kuva lennossa sivulle

          if(parametri.equals("createimage"))
          {


          // Luodaan kuva johon voi piirtää
          BufferedImage bi = new BufferedImage(150,25,BufferedImage.TYPE_INT_RGB);
          
          bi.createGraphics().drawRect(0,0,150,25);

          
          // Kirjoitetaan kuvaan
          Graphics2D g = (Graphics2D) bi.getGraphics();
          
          Font f = new Font("Courier",Font.ITALIC Font.BOLD,20);
        g.setFont(f);
        g.setColor(Color.white);


          g.drawString(generateRandom(), 15, 18);
          g.drawLine(15,4,135,4);
          g.drawLine(15,11,135,11);
          g.drawLine(15,19,135,19);
          
          // Lähetetään jpeg-streamina
          resp.setContentType("image/jpeg");
          ServletOutputStream sos = resp.getOutputStream();
          
          JPEGImageEncoder je   = JPEGCodec.createJPEGEncoder(sos);
          
          je.encode(bi);
          sos.close();

          }
       
       }catch (Exception e)
       {
          e.printStackTrace();   
       }
       }

       public String generateRandom()
       {
          //Luodaan Ramdon ja seed tulee tämänhetkisestä ajasta
          
          Random generator = new Random();
          String strLuku="";   
          
          for(int i = 0;i

    Äänestä

  • Piru kirjoitti:

    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Composite;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.MediaTracker;
    import java.awt.Toolkit;
    import java.awt.geom.AffineTransform;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.URL;
    import java.util.Random;

    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;

    public class DynPic extends HttpServlet {


       /**
        * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest, HttpServletResponse)
        */
       protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
          throws ServletException, IOException {
          doPost(arg0,arg1);   
       }
       
       /**
        * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest, HttpServletResponse)
        */
       protected void doPost(HttpServletRequest req, HttpServletResponse resp)
          throws ServletException, IOException {
          
          //haetaan pyynnöstä parametri "action"
                
          String parametri = req.getParameter("action");
          

       try
       {
          //Jos action on null, niin kutsutaan itseä uudestaan ja oikealla parametrilla

          if(parametri == null)
          {
             PrintWriter out = resp.getWriter();
             
             out.println("");   
             out.println("");   
             out.println("");   
             out.println("");   
             out.println("");   
          }
          
          //Jos on kutsuttu parametrillä "action=createimage", niin luodaan kuva lennossa sivulle

          if(parametri.equals("createimage"))
          {


          // Luodaan kuva johon voi piirtää
          BufferedImage bi = new BufferedImage(150,25,BufferedImage.TYPE_INT_RGB);
          
          bi.createGraphics().drawRect(0,0,150,25);

          
          // Kirjoitetaan kuvaan
          Graphics2D g = (Graphics2D) bi.getGraphics();
          
          Font f = new Font("Courier",Font.ITALIC Font.BOLD,20);
        g.setFont(f);
        g.setColor(Color.white);


          g.drawString(generateRandom(), 15, 18);
          g.drawLine(15,4,135,4);
          g.drawLine(15,11,135,11);
          g.drawLine(15,19,135,19);
          
          // Lähetetään jpeg-streamina
          resp.setContentType("image/jpeg");
          ServletOutputStream sos = resp.getOutputStream();
          
          JPEGImageEncoder je   = JPEGCodec.createJPEGEncoder(sos);
          
          je.encode(bi);
          sos.close();

          }
       
       }catch (Exception e)
       {
          e.printStackTrace();   
       }
       }

       public String generateRandom()
       {
          //Luodaan Ramdon ja seed tulee tämänhetkisestä ajasta
          
          Random generator = new Random();
          String strLuku="";   
          
          for(int i = 0;i

    Aivan loistavaa. Kiitos Pirulle sekä muille auttaneille!

    Sen verran vielä, että saan selaimen pakotettua antamaan tallennusikkunan kirjoittamalla seuraavasti:

    resp.setContentType("application/force-download");

    Eli tätä eka vastaaja tarkoitti. Tällä palstalla liikkuu näköjään ihan ammattilaisiakin!

    Äänestä

Kommentoi aloitusta


Jamputin kirjoitti:

Heippa!

Olen suunnittelemassa webbisivua, jossa oleva nappula laukaisee java-servletin, joka generoi tekstiä http-postissa tulleiden parametrien mukaisesti. Tähän asti helppoa.

Mutta miten saan generoidun tekstin talletettua käyttäjän koneelle tiedostoksi? Siis siten, että selain tarjoaisi save as -dialogin ja tarjoaisi käyttäjälle mahdollisuutta tallentamiseen.

En keksi mistä pitäisi lähteä liikkeelle. Onko generoitu teksti pakko tallettaa ensin serverillä tiedostoksi ja tehdä sitten linkki siihen, vai onko fiksumpaa tapaa toteuttaa asia?

Kiitos etukäteen!

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu