I gotta be honest with you, I've never used the upload capability in Struts. I only needed upload functionality in one Struts app I wrote, and it was an application that was originally using my old custom framework that had its own way of doing uploads, so that just got ported with the app. So, I'm starting from a point of ignorance with what exists now.

This fact, coupled with what looks to me like a decent amount of code posted, has made me glance over it a bit, but not try and absorb it in any real detail. That's one of the reasons I made the comment about comments: it would certainly help me understand what is going on and what you are thinking throughout the code.

I think I can make one generic comment though... I would be talking to the Struts team long before me :) If they aren't on board with this, to me you are just wasting your time (as far as getting it in Struts goes at least). They are in a better position to make intelligent comment than I am anyway.

You might also consider a diagram or two, pictures being worth a thousand words (or lines of code!) and all that... It might just be me not knowing the current upload stuff, but a diagram or two might put a lot of things in the proper context very quickly.

Again though, if the Struts team isn't behind this effort, I would personally say the hell with it. Unless you want to release it independent of them and Struts, it's probably wasted effort unfortunately.

Frank

Dakota Jack wrote:
Hello, Frank,

If you don't mind, I would like to talk to you a bit about what you
think is needed, so that I can be effective.  Essentially the code is
an attempt to do two things:

1.  Show how a slight change which can be made consistent with past
upload code in Struts can make life good for people who want to code
their own upload application.

2.  Show how such an application might look, so that the idea of the
changes makes sense.

Part One (1) involves the first three interfaces which replace the
present code and provide interfaces the present code can live with.  I
assume taht these interfaces are so obvious that comments are not too
necessary with them.

public interface MultipartFile
    extends Serializable {
  public long        getSize();
  public void        setSize(long fileSize);
  public String      getName();
  public void        setName(String fileName);
  public String      getContentType();
  public void        setContentType(String fileContentType);
  public byte[]      getData();
  public InputStream getInputStream();
  public void        reset();
}

public interface MultipartData {
  public Iterator getParameterNames();
  public String   getParameter(String name);
  public String[] getParameterValues(String name);
  public Map      getFiles();
}

public interface MultipartHandler {
  public void          handleRequest(Object [] params) throws IOException;
  public ActionMapping getMapping();
  public void          setMapping(ActionMapping mapping);
  public ActionServlet getServlet();
  public void          setServlet(ActionServlet servlet);
}


The first part of the Second Part (2) is more complicated, but the only classes of any import are just implementations of the rather obvious interfaces. The second part of the Second Part (2) is much more complicated and cannot really be understood without the rest of the application. This is not too important except for showing how an Upload class that acts as the glue between the upload application and the Struts framework might look. I want access to ActionForm so that I can use the ActionForm in the application that feeds the Upload class and so that Monitor subclasses can have a framework basis to return data too.

Given this, what do you think would be helpful to you?  Keep it in
mind that my goal is not to focus on the applicatoin at present but on
the proposed opening up of the Struts framework.  I can code this on
my own and use it, but I would rather it were possible for others to
also provide sample applicatoins.

Is this helpful?

Jack


On Fri, 11 Mar 2005 00:25:41 -0500, Frank W. Zammetti <[EMAIL PROTECTED]> wrote:

Jack, one comment on this... I think it would be helpful to comment the
code you've posted.

Frank

dev@struts.apache.org wrote:

  Date: 2005-03-10T21:20:10
  Editor: DakotaJack
  Wiki: Apache Struts Wiki
  Page: StrutsUpload
  URL: http://wiki.apache.org/struts/StrutsUpload

  no comment

Change Log:

------------------------------------------------------------------------------
@@ -70,10 +70,13 @@
 3.  !UploadFileItemFactory (extends 
org.apache.commons.fileupload.!DefaultFileItemFactory)
 4.  Monitor
 5.  Upload
+ 6.  !UploadParams

== Code ==

-=== MultipartFile ===
+=== Framework Code ===
+
+==== MultipartFile ====

{{{
public interface MultipartFile
@@ -90,7 +93,7 @@
}
}}}

-=== MultipartData ===
+==== MultipartData ====

{{{
public interface MultipartData {
@@ -101,7 +104,7 @@
}
}}}

-=== MultipartHandler ===
+==== MultipartHandler ====

{{{
public interface MultipartHandler {
@@ -113,7 +116,7 @@
}
}}}

-=== MultipartUtil ===
+==== MultipartUtil ====

{{{
public class MultipartUtil {
@@ -138,7 +141,9 @@
}
}}}

-=== UploadMultipartFile ===
+=== Framework Code Sample Implementation ===
+
+==== UploadMultipartFile ====

{{{
public class UploadMultipartFile
@@ -230,7 +235,7 @@
}
}}}

-=== UploadMultipartData ===
+==== UploadMultipartData ====

{{{
public class UploadMultipartData
@@ -313,7 +318,7 @@
}
}}}

-=== UploadMultipartHandler ===
+==== UploadMultipartHandler ====

{{{
public class UploadMultipartHandler
@@ -423,7 +428,10 @@
}
}}}

-=== UploadOutputStream ===
+
+=== Sample Application Code Pieces ===
+
+==== UploadOutputStream ====


{{{ @@ -454,7 +462,7 @@ } }}}

-=== UploadFileItem ===
+==== UploadFileItem ====

{{{
public class UploadFileItem
@@ -661,7 +669,7 @@
}
}}}

-=== UploadFileItemFactory ===
+==== UploadFileItemFactory ====

{{{
public class UploadFileItemFactory
@@ -704,7 +712,7 @@
}
}}}

-=== Monitor ===
+==== Monitor ====

{{{
public interface Monitor {
@@ -714,7 +722,7 @@
}
}}}

-=== Upload ===
+==== Upload ====

{{{
public class Upload {
@@ -1111,6 +1119,89 @@
      return excluded = false;
    }
    return excluded;
+  }
+}
+}}}
+
+==== UploadParams ====
+
+{{{
+public class UploadParams
+    implements Serializable {
+
+  private String fileName;
+  private String uploadStatus;
+  private long   fileSize;    // file size
+  private String contentType;
+  private String filePath;    // store location
+  private String storeType;   // store storeType
+  private String overwriteFileName;
+  private String fileExt;
+  private String overwriteFileExt;
+
+  public UploadParams(String fileName,
+                      String uploadStatus,
+                      long   fileSize,
+                      String contentType,
+                      String storeType,
+                      String filePath,
+                      String overwriteFileName) {
+    this.fileName          = fileName;
+    this.uploadStatus      = uploadStatus;
+    this.fileSize          = fileSize;
+    this.contentType       = contentType;
+    this.storeType         = storeType;
+    this.filePath          = filePath;
+    this.overwriteFileName = overwriteFileName;
+
+    if(fileName != null) {
+      int j = fileName.lastIndexOf(".");
+      if(j != -1)
+        fileExt = fileName.substring(j + 1, fileName.length());
+    }
+
+    if(overwriteFileName != null) {
+      int k = overwriteFileName.lastIndexOf(".");
+      if(k != -1) {
+        overwriteFileExt = overwriteFileName.substring(k + 1, 
overwriteFileName.length());
+      }
+    }
+  }
+
+  public String getContentType() {
+    return contentType;
+  }
+
+  public String getFileExt() {
+    return fileExt;
+  }
+
+  public String getFileName() {
+    return fileName;
+  }
+
+  public String getFilePath() {
+    return filePath;
+  }
+
+  public long getFileSize() {
+    return fileSize;
+  }
+
+  public String getOverwriteFileExt() {
+    return overwriteFileExt;
+  }
+
+  public String getOverwriteFileName() {
+    return overwriteFileName;
+  }
+
+  public String getStoreType() {
+    return storeType;
+  }
+
+  public String getUploadStatus() {
+    return uploadStatus;
  }
}
}}}

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]






-- Frank W. Zammetti Founder and Chief Software Architect Omnytex Technologies http://www.omnytex.com


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]






-- Frank W. Zammetti Founder and Chief Software Architect Omnytex Technologies http://www.omnytex.com


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to