[Java/web] File upload

Pagina: 1
Acties:

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Ik ben op dit moment bezig met het ontwikkelen van een fileupload component voor een struts webapplicatie. Ik zou dit component dan ook graag willen onderwerpen aan regressie testen (JUnit). Ik maak ook gebruik van StrutsTestCase.

Mijn fileupload component is zo opgebouwd:

FileBean (accessor methods: filename, clientpath, serverpath, contenttype)
FileUpload bean: hierin ga ik de file, gesubmit door het formulier, inlezen via volgende regel
Java:
1
ServletInputStream in = request.getInputStream();

Nu wordt de getInputStream-method niet ondersteund door mijn testcase :(
Dus laat ik de testcase voorlopig maar achterwege, tenzij iemand een betere oplossing weet natuurlijk.

Ik ga dus de volledige request (regel per regel) uitlezen, en op deze manier de file wegschrijven op de server (is dit een goede manier van werken?) :?

Ik wil ook voor iedere file upload een unieke ID genereren, kan ik dit het beste doen op basis van de timestamp (milliseconds), of zijn er andere betere oplossingen?
Is het dan beter om gewoon een string te genereren, als key, of kan ik hiervoor toch maar beter een soort van generator-class voor aanmaken?

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Het Jakarta project heeft in het commons project een fileupload component voor java geschreven, kijk daar eens naar. 2x het wiel uitvinden is niet echt nodig. ;)

Als binnen een ms twee files worden afgehandeld of wanneer de klok wordt teruggezet dan kan het zijn dat je twee dezelfde id's krijgt, niet erg waarschijnlijk natuurlijk. ;)

Verwijderd

Gert,
Ik ben dus nu ook bezig met deze module. Heb jij deze module al eens gebruikt. Ik loop namelijk vast op 1 foutmelding.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
iskFileUpload upload = new DiskFileUpload();
        
        //Parse the request
        List /* FileItem */ items = upload.parseRequest(request);
            
        // Process the uploaded items
        Iterator iter = items.iterator();
        
        while (iter.hasNext()) {
        FileItem item = (FileItem) iter.next();
        
            if (item.isFormField()) {
            } else {
                String fileName = item.getName();
                long fileSize = item.getSize();
                // save comment and filename to database
                out.print(fileName + "<BR>");
                out.print(fileSize);
                // write the file
                File uploadedFile = new File("", fileName);
                --> HIER GAAT HET MIS item.write(uploadedFile);
            }
        }



Hier een gedeelte van mn foutmelding:

exception

org.apache.jasper.JasperException


root cause

java.lang.NullPointerException
at org.apache.commons.fileupload.DefaultFileItem.write(DefaultFileItem.java:442)
at org.apache.jsp.verwerk_upload_jsp._jspService(verwerk_upload_jsp.java:92)

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 24-05 11:06

Robtimus

me Robtimus no like you

Verwijderd schreef op 17 juni 2004 @ 13:17:
root cause

java.lang.NullPointerException
at org.apache.commons.fileupload.DefaultFileItem.write(DefaultFileItem.java:442)
at org.apache.jsp.verwerk_upload_jsp._jspService(verwerk_upload_jsp.java:92)
Gokje, uploadedFile is wellicht null?

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Nee, die is gevuld.

D:\Documenten\Mijn afbeeldingen\mediumposablebob.jpg

Het mapje op de server is wel alleen lezen? Zou het daar aan liggen?

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Verwijderd schreef op 17 juni 2004 @ 13:17:
Gert,
Ik ben dus nu ook bezig met deze module. Heb jij deze module al eens gebruikt. Ik loop namelijk vast op 1 foutmelding.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
iskFileUpload upload = new DiskFileUpload();
        
        //Parse the request
        List /* FileItem */ items = upload.parseRequest(request);
            
        // Process the uploaded items
        Iterator iter = items.iterator();
        
        while (iter.hasNext()) {
        FileItem item = (FileItem) iter.next();
        
            if (item.isFormField()) {
            } else {
                String fileName = item.getName();
                long fileSize = item.getSize();
                // save comment and filename to database
                out.print(fileName + "<BR>");
                out.print(fileSize);
                // write the file
                File uploadedFile = new File("", fileName);
                --> HIER GAAT HET MIS item.write(uploadedFile);
            }
        }



Hier een gedeelte van mn foutmelding:

exception

org.apache.jasper.JasperException


root cause

java.lang.NullPointerException
at org.apache.commons.fileupload.DefaultFileItem.write(DefaultFileItem.java:442)
at org.apache.jsp.verwerk_upload_jsp._jspService(verwerk_upload_jsp.java:92)
2 dingen die ik me afvraag:

1. Waarom gebruik je die constructor van File. Waarom niet File(String pathname)?
2. Die map is alleen lezen zeg je. Denk je dat daar dan een file in geschreven kan worden :?

[edit] Als het aan dat tweede ligt moet je je wel even dik gaan schamen btw ;)

[edit2] Lees de uitleg van de door jouw gebruikte constructor ook even:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public File(String parent,
            String child)
Creates a new File instance from a parent pathname string and a child pathname string. 

If parent is null then the new File instance is created as if by invoking the single-argument 
File constructor on the given child pathname string. 

Otherwise the parent pathname string is taken to denote a directory, and the child 
pathname string is taken to denote either a directory or a file. If the child 
pathname string is absolute then it is converted into a relative pathname in a 
system-dependent way. If parent is the empty string then the new File instance is 
created by converting child into an abstract pathname and resolving the result 
against a system-dependent default directory. Otherwise each pathname string is 
converted into an abstract pathname and the child abstract pathname is resolved 
against the parent.

[ Voor 35% gewijzigd door zneek op 17-06-2004 14:48 ]


Verwijderd

De URL.getContent method is (ook) een goede manier om te controleren of een file geen IO fouten opwerpt...

Waarom gebruik je uberhaupt URI's en niet URL's als je een webapplicatie bouwt? :?

[ Voor 5% gewijzigd door Verwijderd op 17-06-2004 19:28 ]

Pagina: 1