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
>