18. februar 2003 - 10:05Der er
84 kommentarer og 1 løsning
Upload af filer
Hej Eksperter,
Jeg sidder og arbejder på et site som baserer sig på servlets. Jeg vil gerne lave en side hvor man kan vælge en fil og så uploade den til et specifikt direktorat på en server. Hvordan gør jeg det?
Med nogle enkelte tilrettelser burde du kunne bruge denne: Stien hvor din fil skal gemmes, angiver du ved at sætte parametret PATH Bemærk at du skal bruge en oreilly pakke, som du skal hente fra deres hjemmeside.
...og du skal naturligvis sørge for - på forhånd - at du har skriverettigheder i den mappe du gerne vil gemme filen. Og det er naturligvis den bruger som WebServeren kører som, der skal have skriverettigheder.
Jeg har benyttet både http://www.servlets.com/cos (nævnt tidligere) og Struts upload-funktionalitet. De fungerer begge to. I næste version benytter Struts internt FileUpload.
Jeg skal vel lægge en .jar fil ind i mit java miljø for at få det til at virke. Jeg bruger i øvrigt JCreator. Jeg kan finde dokumentationen men ikke filen.
Jeg får at vide at pakken ikke eksisterer når jeg prøver at kompilerer. Det er fordi pakken ikke eksisterer i mit miljø. Jeg ville sætte pris på hvis en af jer gad sende den til mikbis1@mail.dk
Jeg kan ikke helt gennemskue hvad det er som der sker i klassen. Kan du vise mig hvordan jeg laver en side hvor man vælger en fil og ved tryk på en knap uploader den
Jeg har ikke gammel sourcecode online og det ligger ikke på min lokale maskine, men du bruger den nogenlunde således: ServletInputStream sis = request.getInputStream(); RequestFileHandler rfh = new RequestFileHandler(directory,sis); hvor request er din HttpServletRequest. Derefter går det af sig selv :-). I HTML siden skal du lave en form nogenlunde således: <form action="MinFilServlet" method="post" name="fil" onsubmit="if(this.file.value='') return false" enctype="multipart/form-data" target="_self"> <span>Vælg en lokal fil: <input type="file" name="file"></span> <span>Afsend: <input type="submit" value="Afsend fil"></span> </form> hvor action skal angive URL'en (relativ eller absolut) til din servlet.
F:\tomcat4.0\webapps\mortallovetest\WEB-INF\classes\Doupload.java:17: cannot resolve symbol symbol : constructor RequestFileHandler (java.lang.String,javax.servlet.ServletInputStream) location: class RequestFileHandler RequestFileHandler rfh = new RequestFileHandler("directory",sis); ^ 1 error
Du skal anbringe RequestFileHandler i det rigtige directory i henhold til package deklarationen og importere den. import nordisk.net.RequestFileHandler; og ligges i /nordisk/net/ directory fra serverens root.
Der er et sanity check i RequestFileHandler, der sikrer at det angivne directory er til stede og at der kan skrives til det. if(!directory.isDirectory() || !directory.canWrite()) throw new IllegalArgumentException("Invalid argument [String directory]: " + dir); Du skal først oprette det angivne directory og sikre dig at det er skrivbart.
det dur fint på min side. beklager http://www.mycgiserver.com/~nordisk/upload.html bare for syns skyld. Du kan prøve med: PrintWriter out = response.getWriter(); String directory = "http://www.web-oasen.dk/mortallovetest/music/"; File test = new File(directory); if(directory.isDirectory()) // skriv noget til streamen out.println("Er et directory!!"); if(!directory.canWrite()) // skriv noget til streamen out.println("Kan skrives til!!"); out.close(); og ikke en kæft andet for at se om det virker.
F:\tomcat4.0\webapps\mortallovetest\WEB-INF\classes\Doupload.java:17: cannot resolve symbol symbol : method isDirectory () location: class java.lang.String if(directory.isDirectory()) ^ F:\tomcat4.0\webapps\mortallovetest\WEB-INF\classes\Doupload.java:20: cannot resolve symbol symbol : method canWrite () location: class java.lang.String if(directory.canWrite()) ^ 2 errors
PrintWriter out = response.getWriter(); String directory = "http://www.web-oasen.dk/mortallovetest/music/"; File test = new File(directory); if(directory.isDirectory()) // skriv noget til streamen out.println("Er et directory!!"); if(directory.canWrite()) // skriv noget til streamen out.println("Kan skrives til!!"); out.close();
if(test.isDirectory()) // skriv noget til streamen out.println("Er et directory!!"); if(test.canWrite()) // skriv noget til streamen out.println("Kan skrives til!!"); Jeg tager dumme-hatten på. Sorry en forglemmert.
if(test.isDirectory()) // skriv noget til streamen out.println("Er et directory!!"); if(test.canWrite()) // skriv noget til streamen out.println("Kan skrives til!!"); out.close();
Jeg læser lige løs(er lang tid siden jeg har arbejdet med disse pakker), men det er noget med klassen UploadedFile og ServletUtils mm. Vender lige tilbage!
Ok. Når du har hentet .zip-filen fra min URL skal den pakkes ud. I det bibliotek, der kommer frem er der en WAR-fil. Den skal du deploye (Der er allerede lavet en færdig upload servlet - man kan f.eks. vælge tre filer, der skal uploades og vupti det sker!!).
Min BEA server ville ikke, så jeg brugte deploytool.exe og j2ee.exe fra min "J2EE installation"/bin.
Jeg har ikke arbejdet med Tomat før.. Kender til BEA og Resin.. Hvis du vil se, at det virker, kan du køre deploytool.exe under din J2EE installation og der vælge new application og så add'e WAR filen. Derefter kunne jeg gennem localhost:8000 nemt benytte servletten. War-URL lyder som stien til der, hvor war-filen ligger på din maskine - vælg den og deploy tror jeg
Gå ind i kontrolpanelet -> System -> Advanced -> Environment Variables Der skal du tilføje JAVA_HOME og J2EE_HOME. Hvis J2EE ligger i fx. c:\j2sdkEE1.3.1 skal J2EE_HOME være dette bibliotek. Det samme gælder for JAVA_HOME
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.