Avatar billede mik28 Seniormester
18. februar 2003 - 10:05 Der 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?
Avatar billede magoo20000 Nybegynder
18. februar 2003 - 10:51 #1
Jeg mener du kan bruge dette link: Det er en upload servlet.
http://www.servlets.com/cos/index.html
Avatar billede sbm Nybegynder
18. februar 2003 - 11:02 #2
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.

import com.oreilly.servlet.MultipartRequest;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;

public class Uploadservlet extends HttpServlet
{

    public Uploadservlet()
    {
    }

    public void init(ServletConfig config)
        throws ServletException
    {
        super.init(config);
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out = new PrintWriter(response.getOutputStream());
        out.println("<html>");
        out.println("<head><title>Uploadservlet</title></head>");
        out.println("<body>Get metoden underst&oslash;ttes ikke af servletten.");
        out.println("</body></html>");
        out.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException
    {
        int result = 0;
        String fejltekst = null;
        response.setContentType("text/html");
        PrintWriter out = new PrintWriter(response.getOutputStream());
        out.println("<html>");
        out.println("<head><title>Fil-upload</title></head>");
        out.println("<body>");
        out.println("<H1>Upload af fil</H1><br><hr><br>");
        MultipartRequest multi = null;
        try
        {
            multi = new MultipartRequest(request, request.getParameter("path"), 0x989680);
            out.println("Upload udf&oslash;rt.");
            out.println("filnavn : " + multi.getFilesystemName("uploadfile") + "<br>");
        }
        catch(Exception e)
        {
            out.println("Der skete en fejl under upload.<br>\n" + e.toString());
        }
        out.println("</body></html>");
        out.flush();
        out.close();
    }

    public String getServletInfo()
    {
        return "Uploadservlet Information";
    }
}
Avatar billede sbm Nybegynder
18. februar 2003 - 11:03 #3
...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.
Avatar billede mik28 Seniormester
18. februar 2003 - 11:10 #4
Hmmmm. Jeg kan ikke finde den pågældende pakke :-(
Avatar billede magoo20000 Nybegynder
18. februar 2003 - 11:18 #5
Vent til det link jeg postede er oppe igen - der er alt, hvad du behøver! Det er også fra O'Reilly.
Avatar billede vange_inet Nybegynder
18. februar 2003 - 11:18 #6
Prøv følgende pakke fra Apache http://jakarta.apache.org/commons/fileupload/index.html.

Du kn også benytte Struts (http://jakarta.apache.org/struts/), som har en upload-funktion.

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.
Avatar billede mik28 Seniormester
18. februar 2003 - 11:30 #7
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.
Avatar billede mik28 Seniormester
18. februar 2003 - 11:57 #8
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
Avatar billede =maddog= Nybegynder
18. februar 2003 - 12:07 #9
der er en klasse her:
www.mycgiserver.com/~nordisk/net/RequestFileHandler.java
der kan gemme til en fil fra en multipart request.
Avatar billede mik28 Seniormester
18. februar 2003 - 12:13 #10
Jeg vil bare gerne have den ovenstående kode til at virke (sbm). Mit problem er bare at jeg ikke kan finde den pakke jeg skal bruge :-(
Avatar billede =maddog= Nybegynder
18. februar 2003 - 12:22 #11
brug den klasse jeg har angivet. Den gør lige nøjagtig det du vil og kræver ikke oreilly pakken installeret.
Avatar billede mik28 Seniormester
18. februar 2003 - 12:39 #12
Det prøver jeg :-)
Avatar billede mik28 Seniormester
18. februar 2003 - 12:53 #13
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
Avatar billede mik28 Seniormester
18. februar 2003 - 13:14 #14
Jeg skal jo bruge en side hvor man kan vælge en fil også uploade den. Jeg er bange for at jeg ikke helt forstår hvordan jeg bruger klassen :-(
Avatar billede =maddog= Nybegynder
18. februar 2003 - 13:15 #15
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&aelig;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.
Avatar billede =maddog= Nybegynder
18. februar 2003 - 13:19 #16
directory er en String med det directory du vil gemme i.
String directory = "/pub";
Avatar billede mik28 Seniormester
18. februar 2003 - 13:40 #17
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class Doupload extends HttpServlet
{
       
        public void doPost (HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException
        {
       
      // String directory = "\test";
       
        ServletInputStream sis = request.getInputStream();
        RequestFileHandler rfh = new RequestFileHandler("directory",sis);

        }       
       
}
Avatar billede mik28 Seniormester
18. februar 2003 - 13:42 #18
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
Avatar billede =maddog= Nybegynder
18. februar 2003 - 13:46 #19
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.
Avatar billede mik28 Seniormester
18. februar 2003 - 13:57 #20
Nu får jeg en nu fejl. Det har til syneladende noget at gøre med hvor jeg skal oprette det direktorat jeg refererer til.

http://www.web-oasen.dk/mortallovetest/servlet/Upload

Her kan du se hvad der sker
Avatar billede mik28 Seniormester
18. februar 2003 - 14:03 #21
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import nordisk.net.RequestFileHandler;

public class Doupload extends HttpServlet
{
       
        public void doPost (HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException
        {
       
        String directory = "/music";
       
        ServletInputStream sis = request.getInputStream();
        RequestFileHandler rfh = new RequestFileHandler(directory,sis);

        }       
       
}
Avatar billede =maddog= Nybegynder
18. februar 2003 - 14:08 #22
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.
Avatar billede mik28 Seniormester
18. februar 2003 - 14:12 #23
http://www.web-oasen.dk/mortallovetest/music/

Det er det her directory jeg prøver at refererer til
Avatar billede =maddog= Nybegynder
18. februar 2003 - 14:17 #24
så angiv en absolut url. det skulle der ikke være noget i vejen med.
Avatar billede mik28 Seniormester
18. februar 2003 - 14:18 #25
Det kan jeg heller ikke :-(
Avatar billede mik28 Seniormester
18. februar 2003 - 14:26 #26
Er det fordi der ikke kan skrives i directoratet?
Avatar billede mik28 Seniormester
18. februar 2003 - 14:31 #27
Jeg har taget et screenshoot af mine indstillinger. Ligger i http://www.web-oasen.dk/mortallovetest/music/
Avatar billede mik28 Seniormester
18. februar 2003 - 14:32 #28
Det er en anelse utydeligt
Avatar billede mik28 Seniormester
18. februar 2003 - 14:42 #29
Det virker som om at det bare er en lille dum ting som er gal. Det ville være så fedt hvis jeg kunne få det til at virke
Avatar billede =maddog= Nybegynder
18. februar 2003 - 14:57 #30
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.
Avatar billede mik28 Seniormester
18. februar 2003 - 14:59 #31
Du skal ikke beklage. Det er helt vildt pænt af dig at hjælpe
Avatar billede =maddog= Nybegynder
18. februar 2003 - 14:59 #32
if(!directory.canWrite()) --> if(directory.canWrite())
Avatar billede mik28 Seniormester
18. februar 2003 - 15:02 #33
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
Avatar billede mik28 Seniormester
18. februar 2003 - 15:05 #34
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import nordisk.net.RequestFileHandler;

public class Doupload extends HttpServlet
{
       
        public void doPost (HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException
        {
       
        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();

       
       
        // String directory = "/music";
       
        // ServletInputStream sis = request.getInputStream();
        // RequestFileHandler rfh = new RequestFileHandler(directory,sis);

        }       
       
}
Avatar billede =maddog= Nybegynder
18. februar 2003 - 15:12 #35
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.
Avatar billede mik28 Seniormester
18. februar 2003 - 15:20 #36
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import nordisk.net.RequestFileHandler;

public class Doupload extends HttpServlet
{
       
        public void doPost (HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException
        {
       
        PrintWriter out = response.getWriter();
        String directory = "http://www.web-oasen.dk/mortallovetest/music/";
        File test = new File(directory);
       
        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();

       
       
        // String directory = "/music";
       
        // ServletInputStream sis = request.getInputStream();
        // RequestFileHandler rfh = new RequestFileHandler(directory,sis);

        }       
       
}
Avatar billede mik28 Seniormester
18. februar 2003 - 15:22 #37
Der bliver ikke skrevet noget ud
Avatar billede =maddog= Nybegynder
18. februar 2003 - 15:23 #38
hvad giver det af output?
Avatar billede mik28 Seniormester
18. februar 2003 - 15:23 #39
Så det betyder vel at der af en eller anden grund ikke kan skrives
Avatar billede mik28 Seniormester
18. februar 2003 - 15:23 #40
ingenting
Avatar billede =maddog= Nybegynder
18. februar 2003 - 15:25 #41
jeg må lige melde pas så. I hvert fald indtil jeg får bedre tid til at kigge på det.
Avatar billede mik28 Seniormester
18. februar 2003 - 15:27 #42
Det er helt i orden. Ind til videre skal du have tak
Avatar billede =maddog= Nybegynder
18. februar 2003 - 15:27 #43
sidste skud:
String directory = "/mortallovetest/music";
Avatar billede mik28 Seniormester
18. februar 2003 - 15:31 #44
Det vil heller ikke virke :-(
Avatar billede magoo20000 Nybegynder
18. februar 2003 - 21:27 #45
Har du set på mit link?
Avatar billede mik28 Seniormester
18. februar 2003 - 21:31 #46
Ja
Avatar billede mik28 Seniormester
18. februar 2003 - 21:31 #47
Jeg er bare bange for at jeg ikke helt forstod det :-)
Avatar billede mik28 Seniormester
18. februar 2003 - 21:36 #48
Jeg har prøvet at downloade noget af det, men jeg kan ikke finde ud af hvad jeg skal gøre med det
Avatar billede mik28 Seniormester
18. februar 2003 - 21:36 #49
Hvis du har tid er jeg meget interesset
Avatar billede magoo20000 Nybegynder
18. februar 2003 - 21:39 #50
OK. Lad mig lige bruge et par minutter på at genopfriske det!
Avatar billede mik28 Seniormester
18. februar 2003 - 21:39 #51
Det lyder godt
Avatar billede mik28 Seniormester
18. februar 2003 - 21:42 #52
Jeg kan let starte en VNC server på den maskine som jeg bruger som webserver hvis det er lettere
Avatar billede mik28 Seniormester
18. februar 2003 - 21:43 #53
Eller en terminal, men så kan jeg jo ikke se hvad der foregår
Avatar billede mik28 Seniormester
18. februar 2003 - 21:50 #54
Det er vigtigt for mig at fatte bare lidt af hvad det er som sker
Avatar billede mik28 Seniormester
18. februar 2003 - 21:50 #55
:-)
Avatar billede magoo20000 Nybegynder
18. februar 2003 - 21:53 #56
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!
Avatar billede mik28 Seniormester
18. februar 2003 - 21:53 #57
Okay
Avatar billede mik28 Seniormester
18. februar 2003 - 21:55 #58
hvis du er på ICQ er mit nr 295433399, ellers er jeg mikael_bisgaard@hotmail.com på messenger
Avatar billede magoo20000 Nybegynder
18. februar 2003 - 22:16 #59
Jeg har nu lavet en WAR fil, men har lidt problemer med et deploye den på min BEA Server... Fanger dig lige på ICQ senere.
Avatar billede mik28 Seniormester
18. februar 2003 - 22:20 #60
Jeg bruger tomcat
Avatar billede mik28 Seniormester
18. februar 2003 - 22:24 #61
Jeg orker ikke mere i aften. Håber du har tid i morgen.
Avatar billede mik28 Seniormester
19. februar 2003 - 10:26 #62
er der en som kan hjælpe?
Avatar billede magoo20000 Nybegynder
19. februar 2003 - 12:35 #63
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.

Prøv og meld tilbage:-)
Avatar billede mik28 Seniormester
19. februar 2003 - 14:24 #64
Jeg kan godt se der er en war.fil, men jeg kan ikke finde ud af hvad jeg skal gøre med den :-(
Avatar billede mik28 Seniormester
19. februar 2003 - 14:37 #65
Jeg er inde i manageren til tomcat. Der står noget om Install a webapp Path:  og War-URL: og så er der en install knap
Avatar billede magoo20000 Nybegynder
19. februar 2003 - 14:49 #66
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
Avatar billede mik28 Seniormester
19. februar 2003 - 14:50 #67
det har jeg prøvet, men det virker ikke :-(
Avatar billede magoo20000 Nybegynder
19. februar 2003 - 14:54 #68
Har du prøvet med deploytool?
Avatar billede mik28 Seniormester
19. februar 2003 - 14:56 #69
så får jeg at vide at jeg skal angive j2ee_home
Avatar billede magoo20000 Nybegynder
19. februar 2003 - 14:56 #70
Jeg sætter ContextRoot til Upload under deployment og kan derefter få adgang til den gennem http://localhost:8000/Upload/
Avatar billede mik28 Seniormester
19. februar 2003 - 14:58 #71
har du VNC
Avatar billede magoo20000 Nybegynder
19. februar 2003 - 15:00 #72
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
Avatar billede mik28 Seniormester
19. februar 2003 - 15:00 #73
Det
Avatar billede magoo20000 Nybegynder
19. februar 2003 - 15:01 #74
VNC?
Avatar billede mik28 Seniormester
19. februar 2003 - 15:01 #75
fjernkontrol af computerer
Avatar billede magoo20000 Nybegynder
19. februar 2003 - 15:03 #76
Nej, desværre!
Men jeg kan tilbyde en icq snak
Avatar billede mik28 Seniormester
19. februar 2003 - 15:04 #77
Hvilken forbindelse sidder du på
Avatar billede magoo20000 Nybegynder
19. februar 2003 - 15:04 #78
Jeg skal lige logge af min ssl forbindelse - jeg er på gennem en 'uren' kanal igen om 10 minutter!
Avatar billede mik28 Seniormester
19. februar 2003 - 15:05 #79
Jeg kan i en ruf give dig fuld adgang til min server
Avatar billede magoo20000 Nybegynder
19. februar 2003 - 15:05 #80
Det er en krypteret fanden - shdsl med ssl.
Avatar billede mik28 Seniormester
19. februar 2003 - 15:06 #81
nå for søren
Avatar billede mik28 Seniormester
19. februar 2003 - 15:06 #82
ved du op port 5900 er åben
Avatar billede mik28 Seniormester
19. februar 2003 - 15:11 #83
nu skete der et eller andet med deploytool
Avatar billede magoo20000 Nybegynder
19. februar 2003 - 15:13 #84
Jeg er på icq nu!
Avatar billede mik28 Seniormester
19. februar 2003 - 15:13 #85
nr
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