Avatar billede odsgaard Praktikant
16. december 2009 - 14:52 Der er 8 kommentarer og
1 løsning

Få servlet til at sende en fil

Hej

Jeg har en webapplikation, som jeg skal have til at sende en fil til brugeren ud fra nogle data der ligger i en databse.

Jeg har lavet en export servlet, hvor de data der skal sendes er i en ArrayList.

Min ide er så at skrive indholdet af listen til en fil som brugeren kan modtage.

Har i nogle gode forslag til dette?

/Brian
Avatar billede arne_v Ekspert
16. december 2009 - 15:03 #1
En servlet kan sagtens returnere en download fil.

Du saetter bare content type og skriver filen.
Avatar billede arne_v Ekspert
16. december 2009 - 15:04 #2
Eksempel som streamer et billede ud:

package test;

import java.awt.*;
import java.awt.image.*;
import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

import com.sun.image.codec.jpeg.*;

public class TextServlet extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      response.setContentType("image/jpeg");
      BufferedImage bi = new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB);
      Graphics g = bi.getGraphics();
      g.setColor(Color.WHITE);
      g.fillRect(0, 0, 200, 200);
      g.setColor(Color.BLUE);
      g.drawString("Arne", 10, 100);
      try {
        JPEGImageEncoder ecd = JPEGCodec.createJPEGEncoder(response.getOutputStream());
        ecd.encode(bi);
      } catch (FileNotFoundException e) {
        e.printStackTrace();
      } catch (ImageFormatException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
  }
}
Avatar billede arne_v Ekspert
16. december 2009 - 15:05 #3
Eksempel som streamer en anden URL ud:

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.net.*;

public class CopyServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
          URL url = new URL("http://www.eksperten.dk/");
          HttpURLConnection con = (HttpURLConnection)url.openConnection();
          con.connect();
          if(con.getResponseCode() == HttpURLConnection.HTTP_OK) {
              InputStream is = con.getInputStream();
              byte[] b = new byte[1000];
              int n;
              while((n = is.read(b)) >= 0) {
                String s = new String(b,0,n);
                response.getOutputStream().println(s);
              }
              is.close();
          }
          con.disconnect();
        } catch (MalformedURLException e) {
          e.printStackTrace();
        } catch (FileNotFoundException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }
    }
}
Avatar billede odsgaard Praktikant
16. december 2009 - 16:07 #4
Jeg har prøvet at lave følgende:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("txt/csv");

SessionBean bean = (SessionBean) request.getSession().getAttribute("bean");
List<Item> list = new ArrayList<Item>();
String data = request.getParameter("data");
  if (data.equals("capabilities")) {
    list = bean.getCapabilities();
  }
  for (Item i : list) {
  String s = i.getName() + ";" + i.getCount();
  response.getOutputStream().println();
}
response.flushBuffer();

----------

Det virker efter hensigten -> jeg får downloadet en fil, jeg skal også have navngivet filen, så den hedder 'capabilities.txt'
- hvordan får jeg navngivet den?

/Brian
Avatar billede arne_v Ekspert
16. december 2009 - 16:19 #5
Proev med:

response.addHeader("Content-Disposition", "attachment;filename=foobar.csv");
Avatar billede odsgaard Praktikant
16. december 2009 - 16:31 #6
Det er jo fantastisk, hvor godt det virker :)

Tak for hjælpen ..

Så fortjener du både en fadøl og point

/Brian
Avatar billede arne_v Ekspert
16. december 2009 - 16:41 #7
svar
Avatar billede arne_v Ekspert
16. december 2009 - 16:42 #8
Jeg maa nok noejes med point.

1) jeg drikker ikke øl
2) øl/HTTP standarden er ikke godkendt af W3C endnu
Avatar billede odsgaard Praktikant
16. december 2009 - 17:34 #9
Så må du jo hellere få en julehilsen i stedet for :)

Det er dejligt at du så flittigt - og hurtigt - svarer på alle de spørgsmål. Det er bestemt en stor hjælp når man lige sidder fast at man relativt hurtigt kan få noget kvalificeret hjælp :)

God jul til dig

Brian
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
Kurser inden for grundlæggende programmering

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

IT-JOB

Lindhardt og Ringhof Forlag

Data Engineer

IT-Forsyningen I/S

Leder af serverteam

Capgemini Danmark A/S

Open Application (Denmark)