You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by Lukasz Lenart <lu...@apache.org> on 2024/03/12 19:48:11 UTC

Re: improve documentation for UploadedFilesAware

pon., 26 lut 2024 o 12:08 Greg Huber <gr...@gmail.com> napisał(a):
>
> The documentation only lists one file
>
> |public void withUploadedFiles(List<UploadedFile> uploadedFiles) { if
> (!uploadedFiles.isEmpty()) { this.uploadedFile = uploadedFiles.get(0);
> this.fileName = uploadedFile.getName(); this.contentType =
> uploadedFile.getContentType(); this.originalName =
> uploadedFile.getOriginalName(); } }|
>
> For multiple files these need populating
>
> privateFile[]uploadedFiles=null;
>
> privateString[]uploadedFilesContentType=null;
>
> privateString[]uploadedFilesFileName=null;
>
> We have to loop and do it ourselves now?

Basically it would be better to stop using additional fields if not
needed. You can achieve the same behaviour just exposing getters
extracting what's needed from "uploadedFiles", eg:

public void withUploadedFiles(List<UploadedFile> uploadedFiles) {
  this.uploadedFiles = uploadedFiles;
}

public String[] getUploadedFilesContentType() {
  return this.uploadedFiles.stream().map(UploadedFile::getContentType).toArray();
}

etc.


Cheers
Lukasz

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Re: improve documentation for UploadedFilesAware

Posted by Łukasz Lenart <lu...@gmail.com>.
pon., 25 mar 2024 o 10:00 Greg Huber <gr...@gmail.com> napisał(a):
>
> OK great.  More of a chance of it being read 🙂.

Thanks, merged

> I guess this new version includes all the "old versions" security stuff
> from past issues, and is not a new code base.

Yes, it only uses a different mechanism to pass uploaded files from
within the interceptor to an action.

> As the old one is deprecated, and we all rush and upgrade, their may be
> more resources put in trying to break it.  Maybe better to wait a bit
> before upgrading?

The new approach directly addresses all the previous vulnerabilities
where the attacker was able to manipulate the file upload process by
overriding parameters via setters. Migrating to this new mechanism is
safer than staying with the old mechanism. Even if a new vulnerability
will be discovered it will be way easier to fix it as your actions
depend on the interface only.


Regards
-- 
Łukasz
mobile +48 606 323 122 http://www.lenart.org.pl/

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Re: improve documentation for UploadedFilesAware

Posted by Greg Huber <gr...@gmail.com>.
OK great.  More of a chance of it being read 🙂.

I guess this new version includes all the "old versions" security stuff 
from past issues, and is not a new code base.

As the old one is deprecated, and we all rush and upgrade, their may be 
more resources put in trying to break it.  Maybe better to wait a bit 
before upgrading?

On 24/03/2024 20:47, Lukasz Lenart wrote:
> pon., 18 mar 2024 o 14:42 Greg Huber<gr...@gmail.com>  napisał(a):
>> OK...I did not spot the link in the text.
> I repeated the links in the Examples sections of both
>
>
> Cheers
> Lukasz
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:dev-unsubscribe@struts.apache.org
> For additional commands, e-mail:dev-help@struts.apache.org
>

Re: improve documentation for UploadedFilesAware

Posted by Lukasz Lenart <lu...@apache.org>.
pon., 18 mar 2024 o 14:42 Greg Huber <gr...@gmail.com> napisał(a):
>
> OK...I did not spot the link in the text.

I repeated the links in the Examples sections of both


Cheers
Lukasz

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Re: improve documentation for UploadedFilesAware

Posted by Greg Huber <gr...@gmail.com>.
OK...I did not spot the link in the text.


On Mon, 18 Mar 2024 at 12:59, Łukasz Lenart <lu...@gmail.com> wrote:

> pon., 18 mar 2024 o 13:05 Greg Huber <gr...@gmail.com> napisał(a):
> >
> > > See [this page] for more examples and advanced configuration.
> >
> > Which page?
>
> On these pages, a very first sentence
>
> https://struts.staged.apache.org/core-developers/action-file-upload-interceptor
> https://struts.staged.apache.org/core-developers/file-upload-interceptor
>
> > > I reverted this idea and UploadedFile isn't generic.
> >
> > that would be in 7.0.0_M4?  I used _M3 to test it.
>
> Yes, I need to reverse merge master and push M4
>
>
> Cheers
> Lukasz
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> For additional commands, e-mail: dev-help@struts.apache.org
>
>

Re: improve documentation for UploadedFilesAware

Posted by Łukasz Lenart <lu...@gmail.com>.
pon., 18 mar 2024 o 13:05 Greg Huber <gr...@gmail.com> napisał(a):
>
> > See [this page] for more examples and advanced configuration.
>
> Which page?

On these pages, a very first sentence
https://struts.staged.apache.org/core-developers/action-file-upload-interceptor
https://struts.staged.apache.org/core-developers/file-upload-interceptor

> > I reverted this idea and UploadedFile isn't generic.
>
> that would be in 7.0.0_M4?  I used _M3 to test it.

Yes, I need to reverse merge master and push M4


Cheers
Lukasz

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Re: improve documentation for UploadedFilesAware

Posted by Greg Huber <gr...@gmail.com>.
> See [this page] for more examples and advanced configuration.

Which page?

> I reverted this idea and UploadedFile isn't generic.

that would be in 7.0.0_M4?  I used _M3 to test it.

On 18/03/2024 11:56, Lukasz Lenart wrote:
> pon., 18 mar 2024 o 08:21 Greg Huber <gr...@gmail.com> napisał(a):
>> Rechecking these :
>>
>> Could not see the link from from the interceptor pages to these detailed
>> help pages.  Add a link after Examples?
>>
>> File Upload Interceptor
>>
>>       Parameters
>>       Extending the Interceptor
>>       Examples
>>
>>
>> Or at the bottom of the page?
> The links are in the very first sentence:
> See [this page] for more examples and advanced configuration.
>
>> There is a UploadedFile is a raw type. References to generic type
>> UploadedFile<T> should be parameterized warning
> I reverted this idea and UploadedFile isn't generic.
>
>
> Cheers
> Łukasz
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> For additional commands, e-mail: dev-help@struts.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Re: improve documentation for UploadedFilesAware

Posted by Lukasz Lenart <lu...@apache.org>.
pon., 18 mar 2024 o 08:21 Greg Huber <gr...@gmail.com> napisał(a):
>
> Rechecking these :
>
> Could not see the link from from the interceptor pages to these detailed
> help pages.  Add a link after Examples?
>
> File Upload Interceptor
>
>      Parameters
>      Extending the Interceptor
>      Examples
>
>
> Or at the bottom of the page?

The links are in the very first sentence:
See [this page] for more examples and advanced configuration.

>
> There is a UploadedFile is a raw type. References to generic type
> UploadedFile<T> should be parameterized warning

I reverted this idea and UploadedFile isn't generic.


Cheers
Łukasz

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Re: improve documentation for UploadedFilesAware

Posted by Greg Huber <gr...@gmail.com>.
Rechecking these :

Could not see the link from from the interceptor pages to these detailed 
help pages.  Add a link after Examples?

File Upload Interceptor

     Parameters
     Extending the Interceptor
     Examples


Or at the bottom of the page?

#####

There is a UploadedFile is a raw type. References to generic type 
UploadedFile<T> should be parameterized warning

private List<UploadedFile> uploadedFiles = new ArrayList<>();
private List<UploadedFile<File>> uploadedFiles = new ArrayList<>();

|@Override public void withUploadedFiles(List<UploadedFile> uploads) { }|

@Override public void withUploadedFiles(List<UploadedFile<File>> arg0) { }

On 17/03/2024 16:46, Lukasz Lenart wrote:
> Added :) Also adjusted the Showcasehttps://github.com/apache/struts/pull/895
>
> niedz., 17 mar 2024 o 12:29 Greg Huber<gr...@gmail.com>  napisał(a):
>> Looks good, but what happened to the examples with the stream stuff?
>>
>> Something like this for MultipleFileUploadUsingArrayActionusing arrays
>> example?
>>
>>
>> public class MultipleFileUploadUsingArrayAction extends ActionSupport
>>           implements UploadedFilesAware {
>>
>>       private List<UploadedFile<File>> uploads = null;
>>
>>       public String upload() throws Exception {
>>           System.out.println("\n\n upload2");
>>           System.out.println("files:");
>>
>>           for (UploadedFile<File> uploadedFile : this.uploads) {
>>               System.out.println("*** " + uploadedFile.getOriginalName()
>> + "\t"
>>                       + uploadedFile.getContentType() + "\t"
>>                       + uploadedFile.length());
>>           }
>>           System.out.println("filenames:");
>>           String[] uploadFileNames = getUploadedFilesFileNames();
>>           for (String n : uploadFileNames) {
>>               System.out.println("*** " + n);
>>           }
>>           System.out.println("content types:");
>>           String[] uploadContentTypes = getUploadedFilesContentType();
>>           for (String c : uploadContentTypes) {
>>               System.out.println("*** " + c);
>>           }
>>           System.out.println("\n\n");
>>           return SUCCESS;
>>       }
>>
>>       @Override
>>       public void withUploadedFiles(List<UploadedFile<File>> uploadedFiles) {
>>           this.uploads = uploadedFiles;
>>       }
>>
>>       private String[] getUploadedFilesFileNames() {
>>           return this.uploads.stream().map(UploadedFile::getOriginalName)
>>                   .toArray(size -> new String[size]);
>>       }
>>
>>       private String[] getUploadedFilesContentType() {
>>           return this.uploads.stream().map(UploadedFile::getContentType)
>>                   .toArray(size -> new String[size]);
>>       }
>> }
>>
>>
>> On 17/03/2024 09:33, Lukasz Lenart wrote:
>>> Better?
>>> https://struts.staged.apache.org/core-developers/action-file-upload
>>> https://struts.staged.apache.org/core-developers/file-upload
>>>
>>> czw., 14 mar 2024 o 15:29 Greg Huber<gr...@gmail.com>   napisał(a):
>>>> Sorry, I meant we need to copy/duplicate this page :
>>>>
>>>> https://struts.apache.org/core-developers/file-upload.html
>>>>
>>>> to an *action* version:
>>>>
>>>> https://struts.apache.org/core-developers/action-file-upload.html
>>>>
>>>> and modify it for the new interceptor methods/logic
>>>>
>>>> On Thu, 14 Mar 2024 at 12:42, Łukasz Lenart<lu...@gmail.com>   wrote:
>>>>
>>>>> Done
>>>>> https://github.com/apache/struts-site/pull/231
>>>>>
>>>>> czw., 14 mar 2024 o 11:35 Greg Huber<gr...@gmail.com>   napisał(a):
>>>>>> There is a really good page for the old upload
>>>>>>
>>>>>> https://struts.apache.org/core-developers/file-upload.html
>>>>>>
>>>>>> But the << back to Core Developers Guide does not make it easy to find
>>>>>> it again.
>>>>>>
>>>>>> ##
>>>>>>
>>>>>> https://struts.apache.org/core-developers/action-file-upload-interceptor
>>>>>>
>>>>>> would benefit a similar detail page, updated and with the stream stuff.
>>>>>>
>>>>>> return
>>>>> this.uploadedFiles.stream().map(UploadedFile::getContentType).toArray();
>>>>>> otherwise without streams
>>>>>>
>>>>>> List<UploadedFile<File>>uploads =this.uploadedFiles;
>>>>>>
>>>>>> if(uploads !=null&&uploads.size()>0){
>>>>>>
>>>>>> for(inti =0;i <uploads.size();i++){
>>>>>>
>>>>>> String file uploads.get(i).getOriginalName();
>>>>>>
>>>>>> // destroy the temporary file created
>>>>>>
>>>>>> uploads.get(i).delete();
>>>>>>
>>>>>> }
>>>>>>
>>>>>> }
>>>>>>
>>>>>> On 12/03/2024 19:48, Lukasz Lenart wrote:
>>>>>>> pon., 26 lut 2024 o 12:08 Greg Huber<gr...@gmail.com>    napisał(a):
>>>>>>>> The documentation only lists one file
>>>>>>>>
>>>>>>>> |public void withUploadedFiles(List<UploadedFile> uploadedFiles) { if
>>>>>>>> (!uploadedFiles.isEmpty()) { this.uploadedFile = uploadedFiles.get(0);
>>>>>>>> this.fileName = uploadedFile.getName(); this.contentType =
>>>>>>>> uploadedFile.getContentType(); this.originalName =
>>>>>>>> uploadedFile.getOriginalName(); } }|
>>>>>>>>
>>>>>>>> For multiple files these need populating
>>>>>>>>
>>>>>>>> privateFile[]uploadedFiles=null;
>>>>>>>>
>>>>>>>> privateString[]uploadedFilesContentType=null;
>>>>>>>>
>>>>>>>> privateString[]uploadedFilesFileName=null;
>>>>>>>>
>>>>>>>> We have to loop and do it ourselves now?
>>>>>>> Basically it would be better to stop using additional fields if not
>>>>>>> needed. You can achieve the same behaviour just exposing getters
>>>>>>> extracting what's needed from "uploadedFiles", eg:
>>>>>>>
>>>>>>> public void withUploadedFiles(List<UploadedFile> uploadedFiles) {
>>>>>>>      this.uploadedFiles = uploadedFiles;
>>>>>>> }
>>>>>>>
>>>>>>> public String[] getUploadedFilesContentType() {
>>>>>>>      return
>>>>> this.uploadedFiles.stream().map(UploadedFile::getContentType).toArray();
>>>>>>> }
>>>>>>>
>>>>>>> etc.
>>>>>>>
>>>>>>>
>>>>>>> Cheers
>>>>>>> Lukasz
>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe,e-mail:dev-unsubscribe@struts.apache.org
>>>>>>> For additional commands,e-mail:dev-help@struts.apache.org
>>>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe,e-mail:dev-unsubscribe@struts.apache.org
>>>>> For additional commands,e-mail:dev-help@struts.apache.org
>>>>>
>>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe,e-mail:dev-unsubscribe@struts.apache.org
>>> For additional commands,e-mail:dev-help@struts.apache.org
>>>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:dev-unsubscribe@struts.apache.org
> For additional commands, e-mail:dev-help@struts.apache.org
>

Re: improve documentation for UploadedFilesAware

Posted by Lukasz Lenart <lu...@apache.org>.
Added :) Also adjusted the Showcase https://github.com/apache/struts/pull/895

niedz., 17 mar 2024 o 12:29 Greg Huber <gr...@gmail.com> napisał(a):
>
> Looks good, but what happened to the examples with the stream stuff?
>
> Something like this for MultipleFileUploadUsingArrayActionusing arrays
> example?
>
>
> public class MultipleFileUploadUsingArrayAction extends ActionSupport
>          implements UploadedFilesAware {
>
>      private List<UploadedFile<File>> uploads = null;
>
>      public String upload() throws Exception {
>          System.out.println("\n\n upload2");
>          System.out.println("files:");
>
>          for (UploadedFile<File> uploadedFile : this.uploads) {
>              System.out.println("*** " + uploadedFile.getOriginalName()
> + "\t"
>                      + uploadedFile.getContentType() + "\t"
>                      + uploadedFile.length());
>          }
>          System.out.println("filenames:");
>          String[] uploadFileNames = getUploadedFilesFileNames();
>          for (String n : uploadFileNames) {
>              System.out.println("*** " + n);
>          }
>          System.out.println("content types:");
>          String[] uploadContentTypes = getUploadedFilesContentType();
>          for (String c : uploadContentTypes) {
>              System.out.println("*** " + c);
>          }
>          System.out.println("\n\n");
>          return SUCCESS;
>      }
>
>      @Override
>      public void withUploadedFiles(List<UploadedFile<File>> uploadedFiles) {
>          this.uploads = uploadedFiles;
>      }
>
>      private String[] getUploadedFilesFileNames() {
>          return this.uploads.stream().map(UploadedFile::getOriginalName)
>                  .toArray(size -> new String[size]);
>      }
>
>      private String[] getUploadedFilesContentType() {
>          return this.uploads.stream().map(UploadedFile::getContentType)
>                  .toArray(size -> new String[size]);
>      }
> }
>
>
> On 17/03/2024 09:33, Lukasz Lenart wrote:
> > Better?
> > https://struts.staged.apache.org/core-developers/action-file-upload
> > https://struts.staged.apache.org/core-developers/file-upload
> >
> > czw., 14 mar 2024 o 15:29 Greg Huber<gr...@gmail.com>  napisał(a):
> >> Sorry, I meant we need to copy/duplicate this page :
> >>
> >> https://struts.apache.org/core-developers/file-upload.html
> >>
> >> to an *action* version:
> >>
> >> https://struts.apache.org/core-developers/action-file-upload.html
> >>
> >> and modify it for the new interceptor methods/logic
> >>
> >> On Thu, 14 Mar 2024 at 12:42, Łukasz Lenart<lu...@gmail.com>  wrote:
> >>
> >>> Done
> >>> https://github.com/apache/struts-site/pull/231
> >>>
> >>> czw., 14 mar 2024 o 11:35 Greg Huber<gr...@gmail.com>  napisał(a):
> >>>> There is a really good page for the old upload
> >>>>
> >>>> https://struts.apache.org/core-developers/file-upload.html
> >>>>
> >>>> But the << back to Core Developers Guide does not make it easy to find
> >>>> it again.
> >>>>
> >>>> ##
> >>>>
> >>>> https://struts.apache.org/core-developers/action-file-upload-interceptor
> >>>>
> >>>> would benefit a similar detail page, updated and with the stream stuff.
> >>>>
> >>>> return
> >>> this.uploadedFiles.stream().map(UploadedFile::getContentType).toArray();
> >>>> otherwise without streams
> >>>>
> >>>> List<UploadedFile<File>>uploads =this.uploadedFiles;
> >>>>
> >>>> if(uploads !=null&&uploads.size()>0){
> >>>>
> >>>> for(inti =0;i <uploads.size();i++){
> >>>>
> >>>> String file uploads.get(i).getOriginalName();
> >>>>
> >>>> // destroy the temporary file created
> >>>>
> >>>> uploads.get(i).delete();
> >>>>
> >>>> }
> >>>>
> >>>> }
> >>>>
> >>>> On 12/03/2024 19:48, Lukasz Lenart wrote:
> >>>>> pon., 26 lut 2024 o 12:08 Greg Huber<gr...@gmail.com>   napisał(a):
> >>>>>> The documentation only lists one file
> >>>>>>
> >>>>>> |public void withUploadedFiles(List<UploadedFile> uploadedFiles) { if
> >>>>>> (!uploadedFiles.isEmpty()) { this.uploadedFile = uploadedFiles.get(0);
> >>>>>> this.fileName = uploadedFile.getName(); this.contentType =
> >>>>>> uploadedFile.getContentType(); this.originalName =
> >>>>>> uploadedFile.getOriginalName(); } }|
> >>>>>>
> >>>>>> For multiple files these need populating
> >>>>>>
> >>>>>> privateFile[]uploadedFiles=null;
> >>>>>>
> >>>>>> privateString[]uploadedFilesContentType=null;
> >>>>>>
> >>>>>> privateString[]uploadedFilesFileName=null;
> >>>>>>
> >>>>>> We have to loop and do it ourselves now?
> >>>>> Basically it would be better to stop using additional fields if not
> >>>>> needed. You can achieve the same behaviour just exposing getters
> >>>>> extracting what's needed from "uploadedFiles", eg:
> >>>>>
> >>>>> public void withUploadedFiles(List<UploadedFile> uploadedFiles) {
> >>>>>     this.uploadedFiles = uploadedFiles;
> >>>>> }
> >>>>>
> >>>>> public String[] getUploadedFilesContentType() {
> >>>>>     return
> >>> this.uploadedFiles.stream().map(UploadedFile::getContentType).toArray();
> >>>>> }
> >>>>>
> >>>>> etc.
> >>>>>
> >>>>>
> >>>>> Cheers
> >>>>> Lukasz
> >>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>> To unsubscribe,e-mail:dev-unsubscribe@struts.apache.org
> >>>>> For additional commands,e-mail:dev-help@struts.apache.org
> >>>>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail:dev-unsubscribe@struts.apache.org
> >>> For additional commands, e-mail:dev-help@struts.apache.org
> >>>
> >>>
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail:dev-unsubscribe@struts.apache.org
> > For additional commands, e-mail:dev-help@struts.apache.org
> >

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Re: improve documentation for UploadedFilesAware

Posted by Greg Huber <gr...@gmail.com>.
Looks good, but what happened to the examples with the stream stuff?

Something like this for MultipleFileUploadUsingArrayActionusing arrays 
example?


public class MultipleFileUploadUsingArrayAction extends ActionSupport
         implements UploadedFilesAware {

     private List<UploadedFile<File>> uploads = null;

     public String upload() throws Exception {
         System.out.println("\n\n upload2");
         System.out.println("files:");

         for (UploadedFile<File> uploadedFile : this.uploads) {
             System.out.println("*** " + uploadedFile.getOriginalName() 
+ "\t"
                     + uploadedFile.getContentType() + "\t"
                     + uploadedFile.length());
         }
         System.out.println("filenames:");
         String[] uploadFileNames = getUploadedFilesFileNames();
         for (String n : uploadFileNames) {
             System.out.println("*** " + n);
         }
         System.out.println("content types:");
         String[] uploadContentTypes = getUploadedFilesContentType();
         for (String c : uploadContentTypes) {
             System.out.println("*** " + c);
         }
         System.out.println("\n\n");
         return SUCCESS;
     }

     @Override
     public void withUploadedFiles(List<UploadedFile<File>> uploadedFiles) {
         this.uploads = uploadedFiles;
     }

     private String[] getUploadedFilesFileNames() {
         return this.uploads.stream().map(UploadedFile::getOriginalName)
                 .toArray(size -> new String[size]);
     }

     private String[] getUploadedFilesContentType() {
         return this.uploads.stream().map(UploadedFile::getContentType)
                 .toArray(size -> new String[size]);
     }
}


On 17/03/2024 09:33, Lukasz Lenart wrote:
> Better?
> https://struts.staged.apache.org/core-developers/action-file-upload
> https://struts.staged.apache.org/core-developers/file-upload
>
> czw., 14 mar 2024 o 15:29 Greg Huber<gr...@gmail.com>  napisał(a):
>> Sorry, I meant we need to copy/duplicate this page :
>>
>> https://struts.apache.org/core-developers/file-upload.html
>>
>> to an *action* version:
>>
>> https://struts.apache.org/core-developers/action-file-upload.html
>>
>> and modify it for the new interceptor methods/logic
>>
>> On Thu, 14 Mar 2024 at 12:42, Łukasz Lenart<lu...@gmail.com>  wrote:
>>
>>> Done
>>> https://github.com/apache/struts-site/pull/231
>>>
>>> czw., 14 mar 2024 o 11:35 Greg Huber<gr...@gmail.com>  napisał(a):
>>>> There is a really good page for the old upload
>>>>
>>>> https://struts.apache.org/core-developers/file-upload.html
>>>>
>>>> But the << back to Core Developers Guide does not make it easy to find
>>>> it again.
>>>>
>>>> ##
>>>>
>>>> https://struts.apache.org/core-developers/action-file-upload-interceptor
>>>>
>>>> would benefit a similar detail page, updated and with the stream stuff.
>>>>
>>>> return
>>> this.uploadedFiles.stream().map(UploadedFile::getContentType).toArray();
>>>> otherwise without streams
>>>>
>>>> List<UploadedFile<File>>uploads =this.uploadedFiles;
>>>>
>>>> if(uploads !=null&&uploads.size()>0){
>>>>
>>>> for(inti =0;i <uploads.size();i++){
>>>>
>>>> String file uploads.get(i).getOriginalName();
>>>>
>>>> // destroy the temporary file created
>>>>
>>>> uploads.get(i).delete();
>>>>
>>>> }
>>>>
>>>> }
>>>>
>>>> On 12/03/2024 19:48, Lukasz Lenart wrote:
>>>>> pon., 26 lut 2024 o 12:08 Greg Huber<gr...@gmail.com>   napisał(a):
>>>>>> The documentation only lists one file
>>>>>>
>>>>>> |public void withUploadedFiles(List<UploadedFile> uploadedFiles) { if
>>>>>> (!uploadedFiles.isEmpty()) { this.uploadedFile = uploadedFiles.get(0);
>>>>>> this.fileName = uploadedFile.getName(); this.contentType =
>>>>>> uploadedFile.getContentType(); this.originalName =
>>>>>> uploadedFile.getOriginalName(); } }|
>>>>>>
>>>>>> For multiple files these need populating
>>>>>>
>>>>>> privateFile[]uploadedFiles=null;
>>>>>>
>>>>>> privateString[]uploadedFilesContentType=null;
>>>>>>
>>>>>> privateString[]uploadedFilesFileName=null;
>>>>>>
>>>>>> We have to loop and do it ourselves now?
>>>>> Basically it would be better to stop using additional fields if not
>>>>> needed. You can achieve the same behaviour just exposing getters
>>>>> extracting what's needed from "uploadedFiles", eg:
>>>>>
>>>>> public void withUploadedFiles(List<UploadedFile> uploadedFiles) {
>>>>>     this.uploadedFiles = uploadedFiles;
>>>>> }
>>>>>
>>>>> public String[] getUploadedFilesContentType() {
>>>>>     return
>>> this.uploadedFiles.stream().map(UploadedFile::getContentType).toArray();
>>>>> }
>>>>>
>>>>> etc.
>>>>>
>>>>>
>>>>> Cheers
>>>>> Lukasz
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe,e-mail:dev-unsubscribe@struts.apache.org
>>>>> For additional commands,e-mail:dev-help@struts.apache.org
>>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail:dev-unsubscribe@struts.apache.org
>>> For additional commands, e-mail:dev-help@struts.apache.org
>>>
>>>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:dev-unsubscribe@struts.apache.org
> For additional commands, e-mail:dev-help@struts.apache.org
>

Re: improve documentation for UploadedFilesAware

Posted by Lukasz Lenart <lu...@apache.org>.
Better?
https://struts.staged.apache.org/core-developers/action-file-upload
https://struts.staged.apache.org/core-developers/file-upload

czw., 14 mar 2024 o 15:29 Greg Huber <gr...@gmail.com> napisał(a):
>
> Sorry, I meant we need to copy/duplicate this page :
>
> https://struts.apache.org/core-developers/file-upload.html
>
> to an *action* version:
>
> https://struts.apache.org/core-developers/action-file-upload.html
>
> and modify it for the new interceptor methods/logic
>
> On Thu, 14 Mar 2024 at 12:42, Łukasz Lenart <lu...@gmail.com> wrote:
>
> > Done
> > https://github.com/apache/struts-site/pull/231
> >
> > czw., 14 mar 2024 o 11:35 Greg Huber <gr...@gmail.com> napisał(a):
> > >
> > > There is a really good page for the old upload
> > >
> > > https://struts.apache.org/core-developers/file-upload.html
> > >
> > > But the << back to Core Developers Guide does not make it easy to find
> > > it again.
> > >
> > > ##
> > >
> > > https://struts.apache.org/core-developers/action-file-upload-interceptor
> > >
> > > would benefit a similar detail page, updated and with the stream stuff.
> > >
> > > return
> > this.uploadedFiles.stream().map(UploadedFile::getContentType).toArray();
> > >
> > > otherwise without streams
> > >
> > > List<UploadedFile<File>>uploads =this.uploadedFiles;
> > >
> > > if(uploads !=null&&uploads.size()>0){
> > >
> > > for(inti =0;i <uploads.size();i++){
> > >
> > > String file uploads.get(i).getOriginalName();
> > >
> > > // destroy the temporary file created
> > >
> > > uploads.get(i).delete();
> > >
> > > }
> > >
> > > }
> > >
> > > On 12/03/2024 19:48, Lukasz Lenart wrote:
> > > > pon., 26 lut 2024 o 12:08 Greg Huber<gr...@gmail.com>  napisał(a):
> > > >> The documentation only lists one file
> > > >>
> > > >> |public void withUploadedFiles(List<UploadedFile> uploadedFiles) { if
> > > >> (!uploadedFiles.isEmpty()) { this.uploadedFile = uploadedFiles.get(0);
> > > >> this.fileName = uploadedFile.getName(); this.contentType =
> > > >> uploadedFile.getContentType(); this.originalName =
> > > >> uploadedFile.getOriginalName(); } }|
> > > >>
> > > >> For multiple files these need populating
> > > >>
> > > >> privateFile[]uploadedFiles=null;
> > > >>
> > > >> privateString[]uploadedFilesContentType=null;
> > > >>
> > > >> privateString[]uploadedFilesFileName=null;
> > > >>
> > > >> We have to loop and do it ourselves now?
> > > > Basically it would be better to stop using additional fields if not
> > > > needed. You can achieve the same behaviour just exposing getters
> > > > extracting what's needed from "uploadedFiles", eg:
> > > >
> > > > public void withUploadedFiles(List<UploadedFile> uploadedFiles) {
> > > >    this.uploadedFiles = uploadedFiles;
> > > > }
> > > >
> > > > public String[] getUploadedFilesContentType() {
> > > >    return
> > this.uploadedFiles.stream().map(UploadedFile::getContentType).toArray();
> > > > }
> > > >
> > > > etc.
> > > >
> > > >
> > > > Cheers
> > > > Lukasz
> > > >
> > > > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail:dev-unsubscribe@struts.apache.org
> > > > For additional commands, e-mail:dev-help@struts.apache.org
> > > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> > For additional commands, e-mail: dev-help@struts.apache.org
> >
> >

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Re: improve documentation for UploadedFilesAware

Posted by Greg Huber <gr...@gmail.com>.
Sorry, I meant we need to copy/duplicate this page :

https://struts.apache.org/core-developers/file-upload.html

to an *action* version:

https://struts.apache.org/core-developers/action-file-upload.html

and modify it for the new interceptor methods/logic

On Thu, 14 Mar 2024 at 12:42, Łukasz Lenart <lu...@gmail.com> wrote:

> Done
> https://github.com/apache/struts-site/pull/231
>
> czw., 14 mar 2024 o 11:35 Greg Huber <gr...@gmail.com> napisał(a):
> >
> > There is a really good page for the old upload
> >
> > https://struts.apache.org/core-developers/file-upload.html
> >
> > But the << back to Core Developers Guide does not make it easy to find
> > it again.
> >
> > ##
> >
> > https://struts.apache.org/core-developers/action-file-upload-interceptor
> >
> > would benefit a similar detail page, updated and with the stream stuff.
> >
> > return
> this.uploadedFiles.stream().map(UploadedFile::getContentType).toArray();
> >
> > otherwise without streams
> >
> > List<UploadedFile<File>>uploads =this.uploadedFiles;
> >
> > if(uploads !=null&&uploads.size()>0){
> >
> > for(inti =0;i <uploads.size();i++){
> >
> > String file uploads.get(i).getOriginalName();
> >
> > // destroy the temporary file created
> >
> > uploads.get(i).delete();
> >
> > }
> >
> > }
> >
> > On 12/03/2024 19:48, Lukasz Lenart wrote:
> > > pon., 26 lut 2024 o 12:08 Greg Huber<gr...@gmail.com>  napisał(a):
> > >> The documentation only lists one file
> > >>
> > >> |public void withUploadedFiles(List<UploadedFile> uploadedFiles) { if
> > >> (!uploadedFiles.isEmpty()) { this.uploadedFile = uploadedFiles.get(0);
> > >> this.fileName = uploadedFile.getName(); this.contentType =
> > >> uploadedFile.getContentType(); this.originalName =
> > >> uploadedFile.getOriginalName(); } }|
> > >>
> > >> For multiple files these need populating
> > >>
> > >> privateFile[]uploadedFiles=null;
> > >>
> > >> privateString[]uploadedFilesContentType=null;
> > >>
> > >> privateString[]uploadedFilesFileName=null;
> > >>
> > >> We have to loop and do it ourselves now?
> > > Basically it would be better to stop using additional fields if not
> > > needed. You can achieve the same behaviour just exposing getters
> > > extracting what's needed from "uploadedFiles", eg:
> > >
> > > public void withUploadedFiles(List<UploadedFile> uploadedFiles) {
> > >    this.uploadedFiles = uploadedFiles;
> > > }
> > >
> > > public String[] getUploadedFilesContentType() {
> > >    return
> this.uploadedFiles.stream().map(UploadedFile::getContentType).toArray();
> > > }
> > >
> > > etc.
> > >
> > >
> > > Cheers
> > > Lukasz
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail:dev-unsubscribe@struts.apache.org
> > > For additional commands, e-mail:dev-help@struts.apache.org
> > >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> For additional commands, e-mail: dev-help@struts.apache.org
>
>

Re: improve documentation for UploadedFilesAware

Posted by Łukasz Lenart <lu...@gmail.com>.
Done
https://github.com/apache/struts-site/pull/231

czw., 14 mar 2024 o 11:35 Greg Huber <gr...@gmail.com> napisał(a):
>
> There is a really good page for the old upload
>
> https://struts.apache.org/core-developers/file-upload.html
>
> But the << back to Core Developers Guide does not make it easy to find
> it again.
>
> ##
>
> https://struts.apache.org/core-developers/action-file-upload-interceptor
>
> would benefit a similar detail page, updated and with the stream stuff.
>
> return this.uploadedFiles.stream().map(UploadedFile::getContentType).toArray();
>
> otherwise without streams
>
> List<UploadedFile<File>>uploads =this.uploadedFiles;
>
> if(uploads !=null&&uploads.size()>0){
>
> for(inti =0;i <uploads.size();i++){
>
> String file uploads.get(i).getOriginalName();
>
> // destroy the temporary file created
>
> uploads.get(i).delete();
>
> }
>
> }
>
> On 12/03/2024 19:48, Lukasz Lenart wrote:
> > pon., 26 lut 2024 o 12:08 Greg Huber<gr...@gmail.com>  napisał(a):
> >> The documentation only lists one file
> >>
> >> |public void withUploadedFiles(List<UploadedFile> uploadedFiles) { if
> >> (!uploadedFiles.isEmpty()) { this.uploadedFile = uploadedFiles.get(0);
> >> this.fileName = uploadedFile.getName(); this.contentType =
> >> uploadedFile.getContentType(); this.originalName =
> >> uploadedFile.getOriginalName(); } }|
> >>
> >> For multiple files these need populating
> >>
> >> privateFile[]uploadedFiles=null;
> >>
> >> privateString[]uploadedFilesContentType=null;
> >>
> >> privateString[]uploadedFilesFileName=null;
> >>
> >> We have to loop and do it ourselves now?
> > Basically it would be better to stop using additional fields if not
> > needed. You can achieve the same behaviour just exposing getters
> > extracting what's needed from "uploadedFiles", eg:
> >
> > public void withUploadedFiles(List<UploadedFile> uploadedFiles) {
> >    this.uploadedFiles = uploadedFiles;
> > }
> >
> > public String[] getUploadedFilesContentType() {
> >    return this.uploadedFiles.stream().map(UploadedFile::getContentType).toArray();
> > }
> >
> > etc.
> >
> >
> > Cheers
> > Lukasz
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail:dev-unsubscribe@struts.apache.org
> > For additional commands, e-mail:dev-help@struts.apache.org
> >

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Re: improve documentation for UploadedFilesAware

Posted by Greg Huber <gr...@gmail.com>.
There is a really good page for the old upload

https://struts.apache.org/core-developers/file-upload.html

But the << back to Core Developers Guide does not make it easy to find 
it again.

##

https://struts.apache.org/core-developers/action-file-upload-interceptor

would benefit a similar detail page, updated and with the stream stuff.

return this.uploadedFiles.stream().map(UploadedFile::getContentType).toArray();

otherwise without streams

List<UploadedFile<File>>uploads =this.uploadedFiles;

if(uploads !=null&&uploads.size()>0){

for(inti =0;i <uploads.size();i++){

String file uploads.get(i).getOriginalName();

// destroy the temporary file created

uploads.get(i).delete();

}

}

On 12/03/2024 19:48, Lukasz Lenart wrote:
> pon., 26 lut 2024 o 12:08 Greg Huber<gr...@gmail.com>  napisał(a):
>> The documentation only lists one file
>>
>> |public void withUploadedFiles(List<UploadedFile> uploadedFiles) { if
>> (!uploadedFiles.isEmpty()) { this.uploadedFile = uploadedFiles.get(0);
>> this.fileName = uploadedFile.getName(); this.contentType =
>> uploadedFile.getContentType(); this.originalName =
>> uploadedFile.getOriginalName(); } }|
>>
>> For multiple files these need populating
>>
>> privateFile[]uploadedFiles=null;
>>
>> privateString[]uploadedFilesContentType=null;
>>
>> privateString[]uploadedFilesFileName=null;
>>
>> We have to loop and do it ourselves now?
> Basically it would be better to stop using additional fields if not
> needed. You can achieve the same behaviour just exposing getters
> extracting what's needed from "uploadedFiles", eg:
>
> public void withUploadedFiles(List<UploadedFile> uploadedFiles) {
>    this.uploadedFiles = uploadedFiles;
> }
>
> public String[] getUploadedFilesContentType() {
>    return this.uploadedFiles.stream().map(UploadedFile::getContentType).toArray();
> }
>
> etc.
>
>
> Cheers
> Lukasz
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:dev-unsubscribe@struts.apache.org
> For additional commands, e-mail:dev-help@struts.apache.org
>