Avatar billede roo104 Nybegynder
29. januar 2004 - 20:26 Der er 35 kommentarer og
2 løsninger

Fil upload

Jeg har en jsp test side hvor jeg ville kunne uploade filer, men der sker ikke rigtigt noget noget efter jeg hr submitet formen, jeg kan høre harddisken arbejder ved en stor fil, men jeg får ikke de dato om filen som jeg gerne ville. Det skal lige siges at koden er snuppet fra en servlet, kan jsp godt uploade filer eller er det kun servlets der kan ?

Min kode ser sådan her ud:

<%@page contentType="text/html"%>
<%@page import="com.oreilly.servlet.MultipartRequest, java.util.*, java.io.*"%>
<%
if (request.getParameter("submit") != null) {

try {
  MultipartRequest multi = new MultipartRequest(request, ".");

  out.println("<H3>Params:</H3>");
  out.println("<PRE>");

  Enumeration params = multi.getParameterNames();

  while (params.hasMoreElements()) {
    String name = (String)params.nextElement();
    String value = multi.getParameter(name);
    out.println(name + " = " + value);
  }

  out.println("</PRE>");
  out.println("<H3>Files:</H3>");
  out.println("<PRE>");
  Enumeration files = multi.getFileNames();

  while (files.hasMoreElements()) {
    String name = (String)files.nextElement();
    String filename = multi.getFilesystemName(name);
    String type = multi.getContentType(name);
    File f = multi.getFile(name);
    out.println("name: " + name);
    out.println("filename: " + filename);
    out.println("type: " + type);

    if (f != null) {
      out.println("length: " + f.length());
      out.println();
    }
    out.println("</PRE>");
  }
}
catch (Exception e) { out.println(e); };
}
%>

<form action="upload.jsp" method="post" enctype="multipart/form-data">
<input name="fil" type="file">
<input name="submit" type="submit" value="submit">
</form>
Avatar billede arne_v Ekspert
29. januar 2004 - 22:13 #1
Det bør også virke i JSP.
Avatar billede arne_v Ekspert
29. januar 2004 - 22:14 #2
Hvilket output får du tilbage ?
Avatar billede arne_v Ekspert
29. januar 2004 - 22:23 #3
Har du kigget i de tidligere spørgsmål omkring O'Reilly upload koden:
  http://www.eksperten.dk/spm/318711
  http://www.eksperten.dk/spm/319684
  http://www.eksperten.dk/spm/321088
?
Avatar billede roo104 Nybegynder
30. januar 2004 - 18:39 #4
Har kigger lidt i de andre indlæg..

Jeg får nu disse fejl:

type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: javax/servlet/ServletRequest

root cause
javax.servlet.ServletException: javax/servlet/ServletRequest

Bare ikke en fejl jeg kan bruge til ret meget!
Nogen der har nogen bud på hvad jeg gør galt ?
Avatar billede arne_v Ekspert
30. januar 2004 - 18:45 #5
Får du ikke mere fejl tekst end det ?
Avatar billede roo104 Nybegynder
30. januar 2004 - 18:45 #6
ok... det var fordi jeg havde sat methos=get, med post får jeg ingen fejl, den udfører bare ikke noget. Jeg har prøvet at gøre sådan her:

out.println("1");
out.println(request.getParameter("submit"));

if (request.getParameter("submit") != null) {

try {
out.println("2");

men den komem ikke ind i if sætningen, men når jeg bruger get kan jeg se at submit får en værdi, men det får den ikke med post ?
Avatar billede roo104 Nybegynder
30. januar 2004 - 18:50 #7
den skriver bare
1 null

Fatter ikke lige hvorfor den ikke får submit med.

Nu har jeg prøvet at lave en html fil med formen, som sender formen til en jsp side hvor jeg har fjernet if (request.getParameter("submit") != null) { så den går direkte ind. Så fejler den, og skriver en hel stack, vil du se den ?
Avatar billede arne_v Ekspert
30. januar 2004 - 18:50 #8
Kan du ikke teste på:

if(request.getMethod().equals("POST")) {
Avatar billede roo104 Nybegynder
30. januar 2004 - 19:09 #9
Jeg har prøvet koden fra http://www.eksperten.dk/spm/319684 får
Der skete en fejl under upload.
java.lang.IllegalArgumentException: Not a directory: fil

Med
<form action='Uploadservlet?dir=test' method='post' name='fil' ... enctype="multipart/form-data" ...>

og uden ?dir=test får jeg
Der skete en fejl under upload.
java.lang.IllegalArgumentException: saveDirectory cannot be null

Hvis min servlet ligger i /WEB-INF/classes hvor skal mappen test så ligge, bare i / ?
Avatar billede roo104 Nybegynder
30. januar 2004 - 19:20 #10
Hmmm det ser ud som om den prøver at gemme filen i en mappe test på skrivebordet, det har den så ikke adgang til, nok derfor den fejler. Det er åbentbart der Tomcat kigger efter filer, havde nemlig en anden servlet som læse fra en servlet på disken og den skulle ligge på skrivebordet. Hvordan retter jeg hvor tomcat skal gigge efter filer ?
Avatar billede roo104 Nybegynder
30. januar 2004 - 21:30 #11
Nu har jeg prøvet 2 andre eksempler og jeg får samme fejl. Kan det have noget at køre med at tomcat ikke har rettigheder til at skrive til den mappe jeg angiver ?
Avatar billede arne_v Ekspert
30. januar 2004 - 21:38 #12
Skal directory nødvendigvis sende med op ?

Ellers kan du vel bare kode det ind i JSP koden.

Altså erstatte:

String dir = request.getParameter("dir");
multi = new MultipartRequest(request, dir, 0x989680);

med:

multi = new MultipartRequest(request, "C:/etellerandetsted", 0x989680);
Avatar billede roo104 Nybegynder
30. januar 2004 - 21:47 #13
Jeg har nu
MultipartRequest multi = new MultipartRequest(request, "C:/Tomcat/webapps/ROOT/filupload");

Men får denne fejl:

javax.servlet.ServletException: javax/servlet/ServletRequest
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:867)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:800)
    org.apache.jsp.filupload.upload_jsp._jspService(upload_jsp.java:98)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

root cause

java.lang.NoClassDefFoundError: javax/servlet/ServletRequest
    com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:222)
    com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:109)
    com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:89)
    org.apache.jsp.filupload.upload_jsp._jspService(upload_jsp.java:54)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
Avatar billede roo104 Nybegynder
30. januar 2004 - 21:48 #14
og den skal kunde sende en fil, som ligger inden for \ROOT\ så en anden html side kan få fat i filerne
Avatar billede arne_v Ekspert
30. januar 2004 - 21:51 #15
Mystisk fejl.

javax.servlet.ServletRequest er en helt basal klasse i en JSP/Servlet engine.
Avatar billede arne_v Ekspert
30. januar 2004 - 21:52 #16
Hvor har du smidt O'Reilly klasserne henne ?
Avatar billede roo104 Nybegynder
30. januar 2004 - 21:55 #17
C:\Tomcat\webapps\ROOT\WEB-INF\lib
Avatar billede roo104 Nybegynder
30. januar 2004 - 22:03 #18
Hvordan med classpath's ?
JAVA_HOME = C:\j2sdk\j2sdk1.4.2
J2EE_HOME = C:\Sun\AppServer\jdk
CLASSPATH = C:\j2sdk\j2sdk1.4.2\bin

Har hentet J2EE som en fil der hedder j2eesdk-1_4-dr-windows-eval.exe
Avatar billede arne_v Ekspert
30. januar 2004 - 22:03 #19
Prøv og flyt cos.jar over i jre/lib/ext ...
Avatar billede roo104 Nybegynder
30. januar 2004 - 22:07 #20
Nu ligger cos.jar i bøde j2se og j2ee jre/lib/ext
Avatar billede roo104 Nybegynder
30. januar 2004 - 22:07 #21
men det hjalp heller ikke
Avatar billede arne_v Ekspert
30. januar 2004 - 22:11 #22
%JAVA_HOME%/jre/lib/ext ?

Og ikke i Tomcat træet ?
Avatar billede roo104 Nybegynder
30. januar 2004 - 22:15 #23
ja
Avatar billede arne_v Ekspert
30. januar 2004 - 22:18 #24
Suk.

Har du overvejet at skifte til http://jakarta.apache.org/commons/fileupload/ ?
Avatar billede roo104 Nybegynder
30. januar 2004 - 22:21 #25
Ja meget, men kunne ikke lige finde et eksempel på hvordan man bruger det. Har browser nettet tyndt efter noget der kunne hjælpe, og kan se at der er mange andre der har haft samme problemer som mig
Avatar billede arne_v Ekspert
30. januar 2004 - 22:23 #26
Er det ikke det som er beskrevet her:
  http://jakarta.apache.org/commons/fileupload/using.html
?
Avatar billede roo104 Nybegynder
30. januar 2004 - 22:24 #27
Hvor fan kan man downloade det, når man trykker på  Download the binary distribution from a mirror site  here kommer man til side hvor jeg ikke lige kan finde noget fileupload
Avatar billede roo104 Nybegynder
30. januar 2004 - 22:29 #28
Avatar billede arne_v Ekspert
30. januar 2004 - 22:33 #29
Avatar billede roo104 Nybegynder
30. januar 2004 - 23:01 #30
Ok... det må være noget tomcat noget den fejler allerede ved DiskFileUpload upload = new DiskFileUpload();


javax.servlet.ServletException: javax/servlet/ServletInputStream
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:867)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:800)
    org.apache.jsp.filupload.filupload_jsp._jspService(filupload_jsp.java:72)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

root cause

java.lang.NoClassDefFoundError: javax/servlet/ServletInputStream
    org.apache.jsp.filupload.filupload_jsp._jspService(filupload_jsp.java:48)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
Avatar billede arne_v Ekspert
30. januar 2004 - 23:21 #31
Det er jo grundliggende samme fejl.

Et eller andet er grueligt galt med Java/Tomcat.
Avatar billede arne_v Ekspert
30. januar 2004 - 23:22 #32
Har du lavet noget "specielt" ?
Avatar billede roo104 Nybegynder
30. januar 2004 - 23:24 #33
overhovdet ikke, det er en komplet ren installation Tomcat 5, i et dir uden mellemrum, admin delen virker perfect, og jeg har genstartet tomcat efter hver ændring. Nu prøver jeg at hente Macromedia JRun 4
Avatar billede roo104 Nybegynder
30. januar 2004 - 23:25 #34
Hvis ikke det virker vil jeg prøve på vores test tomcat server på skolen og se om det virker der
Avatar billede roo104 Nybegynder
03. februar 2004 - 21:11 #35
Hmmm stadig intet virker, har fundet en servlet som jeg har copy pastet, og få nu en anden fejl:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("multipart/form-data");
        PrintWriter out = response.getWriter();
        out.println("<html>");
       
        try {         
            String filePath = "d:/mqy/uploads/";
            MultipartRequest multi = new MultipartRequest(request,filePath,2*1024*1024);
            String fileDescription = multi.getParameter("file1");
            Enumeration filesname = multi.getFileNames();
           
            while(filesname.hasMoreElements()) {
                String name = (String)filesname.nextElement();
                String FileName = multi.getFilesystemName(name);
                File f = multi.getFile(name);
                String ContentType = multi.getContentType(name);
            }         
        }
        catch(Exception e){ out.println(e); }
       
        out.println("Success!");
        out.close();
    }

javax.servlet.ServletException: Servlet execution threw an exception
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.netbeans.modules.web.monitor.catalina.MonitorValve.invoke(MonitorValve.java:148)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
    at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
    at java.lang.Thread.run(Thread.java:534)

root cause

java.lang.NoClassDefFoundError: javax/servlet/ServletRequest
    at com.oreilly.servlet.MultipartRequest.(MultipartRequest.java:222)
    at com.oreilly.servlet.MultipartRequest.(MultipartRequest.java:109)
    at dk.ijam.upload.Upload.doPost(Upload.java:24)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.netbeans.modules.web.monitor.catalina.MonitorValve.invoke(MonitorValve.java:148)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
    at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
    at java.lang.Thread.run(Thread.java:534)

Har oprettet en mappe der kan uppes til hvor alle har fulde rettigheder... har du nogen ide om hvad det kan være arne ?
Avatar billede roo104 Nybegynder
03. februar 2004 - 21:33 #36
YES nu virker det, jeg skulle bare kopiere servlet-api.jar fra \Tomcat\common\lib til mit \jre\lib\ext. Det har virket hele tiden, det var bare pga. den fil. Jeg vil godt give dig 10 point for din tid arne, selvom du ikke lige kom med den endelige løsning, så smid et svar
Avatar billede arne_v Ekspert
03. februar 2004 - 21:43 #37
ok

(men der er stadig noget mystisk, fordi man behøver normalt ikke kopiere
noget til jre/lib/ext for at kunne bruge servlets i Tomcat)
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