Hi

I am trying to do something in a jsp file with the oreilly
MultipartParser functions and I am getting immensely frustrated as it
does not work. What I would like to do is:

1. Get information from a set of form fields with the MultipartParser,
including upload fields.

2. Load the filenames from the upload fields into a Vector and compare
the filenames from that Vector to filenames already in the directory
where the files will be downloaded. This is in order to avoid files with
the same filenames overriding existing files.

3. If the filenames do not exist in the directory, download the files
into the directory.

What I am getting stuck on is the fact that I have to use
MultipartParser to read the files from the form and store the filenames
in a Vector. I then compare with existing filenames, then  would like to
use MultipartParser AGAIN to write the filenames to the specified
directory. But the second time around, the MultipartParser does not want
to write anything to the directory as the method readNextPart()
apparently only works once.

Here is the code:

1. Get information from form fields and write filenames into a Vector:
(Vector is defined and initialised earlier on).

MultipartParser parser = new MultipartParser(request, 10*1024*1024);

Part part = null;

while ((part = parser.readNextPart()) != null) {
if (part.isFile()) {
// It's a file part
  FilePart filePart = (FilePart) part;
     String fileName = filePart.getFileName();
     if (fileName != null) {
         existingfiles.add(fileName);
     out.println("filename: " + fileName);
         }
   }
}

2. Compare filenames in Vector with files already in the directory. Note
that the String "proj_id" is a string which I obtain from a database - I
didn't put that code in here.

try {

     Process p = Runtime.getRuntime().exec("ls
/var/www/projects_data/"+proj_id);

     BufferedReader stdInput = new BufferedReader(new
InputStreamReader(p.getInputStream()));
             String s = "";
             BufferedReader stdError = new BufferedReader(new
InputStreamReader(p.getErrorStream()));
             if ((s = stdInput.readLine())== null) {
             samefile = "no";
             }
             while ((s = stdInput.readLine())!= null) {
             StringTokenizer tr = new StringTokenizer(s," ", true );
             String t = tr.nextToken();
             for (int i = 0; i < existingfiles.size(); i++) {
                 out.println ("<br>Vector value is: " +
existingfiles.get(i).toString());
                if (t.equals(existingfiles.get(i).toString()))  {
                 samefile = "yes";
                 samefilenames.add(existingfiles.get(i).toString());
                } else {
                 samefile = "no";
                 }
             }
           }
         }   catch (IOException e) {
             out.println("exception:  ");
             e.printStackTrace();
             System.exit(-1);
          }

3. Use the parser again, this time to write the files to the directory
with the line

long size = fileP.writeTo(dir);

(Note that file "dir" has been set tot the directory earlier)

This happens only if the string samefile equals "no" of course. If
samefile equals "yes" a message is displayed on the screen telling the
user that the file already exists.

Note that I am even initialising a new FileParser called fileP - I
thought this may help. But whatever I try, after the line:

while ((part = parser.readNextPart()) != null) {

nothing happens.

It seems to me that the parser cannot be used twice. Help!!

if (samefile.equals("yes")) {
         out.println ("<br><br><br><br><p><center><font size=+1
color=#9966CC><b>You have uploaded the following file(s) with the same
name(s) as existing file(s):");
         out.println ("<p></p>");
         for (int j = 0; j < existingfiles.size(); j++) {
         out.println ("<p>" + existingfiles.get(j).toString());
         }
       } else if (samefile.equals("no")) {
        while ((part = parser.readNextPart()) != null) {
        String name = part.getName();
        out.println("name: " + name);
         if (part.isFile()) {
           FilePart fileP = (FilePart) part;
           String fileN = fileP.getFileName();
            out.println("filename: " + fileN);
             if (fileN != null) {
                 long size = fileP.writeTo(dir);
            }
         }
        }
       }


Any help, particularly a code example on how to use MultipartParser
twice to upload and save files, or even on how to do all of this
differently will be greatly appreciated.

Thanks

Hugo
--
Dr Hugo Bouckaert
Systems and Programming Engineer

GeoInformatics Exploration Australia P/L
57 Havelock St
West Perth, WA 6005
PO Box 1675, West Perth 6872

Ph:       61 08 9420 7400
Fax:      61 08 9226 1299

www.geoinformex.com

------------------------------------------------------------------------
This email and any attachments may be confidential or legally
privileged. If you received this message in error or are not the
intended recipient, you should destroy the e-mail message and any
attachments or copies, and you are prohibited from retaining,
distributing, disclosing or using any information contained herein.
Please inform us of the erroneous delivery by return e-mail. Thank you
for your cooperation.

===========================================================================
To unsubscribe: mailto [EMAIL PROTECTED] with body: "signoff JSP-INTEREST".
For digest: mailto [EMAIL PROTECTED] with body: "set JSP-INTEREST DIGEST".
Some relevant FAQs on JSP/Servlets can be found at:

 http://archives.java.sun.com/jsp-interest.html
 http://java.sun.com/products/jsp/faq.html
 http://www.esperanto.org.nz/jsp/jspfaq.jsp
 http://www.jguru.com/faq/index.jsp
 http://www.jspinsider.com

Reply via email to