Avatar billede thinge Nybegynder
10. januar 2007 - 19:12 Der er 27 kommentarer og
1 løsning

Brug servlet til uploade filer

Er der nogen som ved hvordan man koder en servlet, således at den kan bruges til at oploade filer med.
Jeg vil gerne opfinde den dybe tallerken igen, da jeg gerne vil lære at lave sådanne servlets

/tinge
Avatar billede arne_v Ekspert
10. januar 2007 - 19:32 #1
Det er super simpelt, hvis du bruger Jakarta FileUpload i dine JSP sider.
Avatar billede arne_v Ekspert
10. januar 2007 - 19:33 #2
<form action="xuploaddo.jsp" enctype="multipart/form-data" method="post">
Beskrivelse: <input type="text" name="beskrivelse"/><br/>
Fil: <input type="file" name="fil"/><br/>
<input type="submit" value="Submit"/>
</form>
Avatar billede arne_v Ekspert
10. januar 2007 - 19:33 #3
<%@page import="org.apache.commons.fileupload.*,java.util.*,java.io.*"%>
<%
DiskFileUpload upload = new DiskFileUpload();
List files = upload.parseRequest(request);
for(int i = 0; i < files.size(); i++) {
  FileItem file = (FileItem)files.get(i);
  if(file.getFieldName().equals("beskrivelse")) {
      String beskrivelse = file.getString();
      out.println("beskrivelse=" + beskrivelse);
  }
  if(file.getFieldName().equals("fil")) {
      String filename = "C:\\test.upl";
      file.write(new File(filename));
  }
}
%>
Avatar billede thinge Nybegynder
10. januar 2007 - 19:44 #4
Ja det er også det jeg er kommet frem til. Problemet er bare at jeg gerne vil vide hvordan man gør. Altså selv kode det.
Jeg er i øjeblikket ude i noget med at læse ServletInputStream igennem, finde det sted hvor filen starter, og til sidst lave det til et byte[], og derefter i databasen.
Men et eller andet sted går det galt, da 1: char'ene går tabt og char'en skifter.
Det sidste er nok noget charset jeg skal ha sat, men jeg ved ikke hvor.

Vil du se koden, det ikke pænt :o)

/thinge
Avatar billede thinge Nybegynder
10. januar 2007 - 19:45 #5
ps. Jeg vil bruge det i servlets ikke i jsp'er
Avatar billede arne_v Ekspert
10. januar 2007 - 19:48 #6
hvis det kun er fordi at du vil submitte til en servlet saa kan du jo bare tage
alt det mellem <% %> og smide ind i doGet
Avatar billede arne_v Ekspert
10. januar 2007 - 19:48 #7
hvis du selv vil lave det skal du have fat i InputStream og parse den

det kan laves, men kraever lidt kode
Avatar billede thinge Nybegynder
10. januar 2007 - 19:55 #8
yes sir, forklar lige hvad du mener med at parse og evt. lidt kode.
/thinge
Avatar billede arne_v Ekspert
10. januar 2007 - 20:14 #9
wrap din InputStream i en BufferedReader saa du kan laese linie

lav en test form med et tekst felt og en file som i mit eksempel

test med en tekst og en tekst fil

start med bare at skrive det du laeser ud til en log fil

studer den saa er formatet faktisk ret oplagt

saa udvider du til flere filer og binaere filer
Avatar billede thinge Nybegynder
10. januar 2007 - 20:33 #10
Hvorfor har jeg ikke tænkt på det med en tekst fil!!!!!!!
Problemet er nu at linebreak ikke kommer ud i logfilen, den løber bare adsted

forslag
/thinge
Avatar billede thinge Nybegynder
10. januar 2007 - 20:40 #11
1:
Jeg læser en linje af gange, finder hvor filen starter.
2:
tilføjer linje til en StringBuffer, indtil filen er slut
3:
StringBuffer.toString().getBytes()

er dette rigtig?

/thinge
Avatar billede arne_v Ekspert
10. januar 2007 - 20:47 #12
jeg ville bare udskrive dem loebende med en PrintWriter println
Avatar billede thinge Nybegynder
10. januar 2007 - 21:12 #13
while((counter = is.read()) != -1)
Kan det passe at den stopper ved char 13
hvis jeg nu siger jeg mangler char 13 og 10, hvad siger du til det, og har det nogen betydning.

/thinge
Avatar billede thinge Nybegynder
10. januar 2007 - 21:13 #14
sorry
while((counter = is.read()) != -1) skal være:
(inputline = inreader.readLine()) != null)
Avatar billede thinge Nybegynder
10. januar 2007 - 22:47 #15
mmm
Opgiver!!!
Kan du hjælpe mig med Jakarta FileUpload

/thinge
Avatar billede arne_v Ekspert
10. januar 2007 - 22:55 #16
10/01-2007 19:48:09

men det skal nok vaere doPost og ikke doGet
Avatar billede arne_v Ekspert
10. januar 2007 - 23:00 #17
jeg kan ogsaa godt proeve at kode en raa servlet
Avatar billede thinge Nybegynder
10. januar 2007 - 23:02 #18
FileUpload 1.1.1
Har nu lavet en servlet. Hvordan sættes den op

/tinge
Avatar billede thinge Nybegynder
10. januar 2007 - 23:05 #19
Ja det må du meget gerne
Avatar billede arne_v Ekspert
11. januar 2007 - 04:23 #20
hvordan du sætter en servlet op ?

class filen i WEN-INF/classes/dinpakke

og definition i web.xml
Avatar billede arne_v Ekspert
11. januar 2007 - 04:23 #21
den rå parse servlet bliver nok først fredag aften ...

beklager
Avatar billede thinge Nybegynder
11. januar 2007 - 08:17 #22
Det er helt ok
Jeg kan nu oploade txtfiler til basen, men billeder går stadig skidt

/thinge
Avatar billede arne_v Ekspert
12. januar 2007 - 03:20 #23
hvad sker der ?

kommer alle bytes frem ?

gemmer du til fil eller til database ?
Avatar billede thinge Nybegynder
12. januar 2007 - 08:46 #24
Jeg gemmer både i fil og database, og hvis jeg kigger i basen hvor mange bytes den fylder, er der for lidt. Hvis jeg sammenligner(et program) den fil jeg oploader og den fil jeg laver er de forskellige. Dog ikke txtfilerne.

Er gået lidt igang med Jakarta FileUpload, for at se hvordan de laver det

/tinge
Avatar billede arne_v Ekspert
13. januar 2007 - 04:53 #25
muligvis er det mig som har ledt dig på vildspor

10/01-2007 20:14:59 taler om BufferedReader til at læse linier med - det er fint
til headere og tekst filer - det er ikek fint til binære filer
Avatar billede thinge Nybegynder
13. januar 2007 - 10:24 #26
mmm, det er jo ikke så godt.
Hvordan skal man så lave det

/tinge
Avatar billede arne_v Ekspert
15. januar 2007 - 00:51 #27
du skal nok læse det som almindelig byte[] via InputStream

når du har fundet diverse headere kan du konvertere dem til String (den har en egnet constructor) og evt. splitte den til linier

og filens indhold tager du så som rå bytes

eller du kan bare bruge FileUpload
Avatar billede thinge Nybegynder
15. januar 2007 - 08:16 #28
Ja indtil videre bruger jeg også FileUpload.
Men jeg kæmper videre, og vender tilbage når / hvis jeg får det til at virke
Jeg lukker spørgsmålet

/thinge
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