Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 335
  • Last Modified:

Delete multiple files with CFFILE

I have a page which shows a list of images in a table,
output from a cfdirectory function.

I currently have it working with radio buttons - select one image,
click delete button, and form processes back to same page, performing and confirming the deletion.

I want to change this to use checkboxes, and allow multiple deletions.
Currently, each radio button is a field called 'delete' with the name of the image
as the value. The name is passed to the delete function as #form.delete# ... works great!

However, when I change it to checkboxes, the value of #form.delete# comes through as multiple file names separated by a comma.

How can I take the value "c:/domains/path/images/filename.jpg, filename2.,jpg, filename3.jpg" and separate out all the filenames - basically trim off everything including the last /, then separate the remaining string by commas, removing spaces.

THEN I need to somehow loop the delete function, running through each of the filenames.

any suggestions?
0
MichaelEvangelista
Asked:
MichaelEvangelista
  • 5
  • 3
1 Solution
 
PluckaCommented:
MichaelEvangelista,

Easy!

<cfloop index="file" list="#form.delete#">
    <cffile action="delete" file="#listLast(file, "/")#" />
</cfloop>

So you are looping over the list of names, then getting for each name the last element in the list where the delimiter is a "/"

Make sense?

Regards
Plucka
0
 
MichaelEvangelistaAuthor Commented:
Yes and no....

If you look at my example, the path comes through as one big long path string with a comma separated list after the last /

so it is like

"C:/domains/thissite.com/wwwroot/images/img1.jpg, img2.jog, img3.jpg"

SO... I think I need to first cut off everything up to that last /, then separate by comma from what is left. Does that make sense?
0
 
PluckaCommented:
No,

My example will work just fine.

Try it

Regards
Plucka
0
Ask an Anonymous Question!

Don't feel intimidated by what you don't know. Ask your question anonymously. It's easy! Learn more and upgrade.

 
MichaelEvangelistaAuthor Commented:
thanks, Plucka - but I must not be doing it right.
I actually have 3 delete functions, as this is a photo gallery type setup,
I am deleting from 3 seprate folders.

I changed this

 <cfoutput>
   <cffile action="Delete" file="#imagesPath#original/#form.delete#">
   <cffile action="Delete" file="#imagesPath#full/#form.delete#">
   <cffile action="Delete" file="#imagesPath#thumb/#form.delete#">
  </cfoutput>

to this

<cfloop index="file" list="#form.delete#">
  <cfoutput>
   <cffile action="Delete" file="#imagesPath#original/ #listLast(form.delete, "/")#">
   <cffile action="Delete" file="#imagesPath#full/#listLast(form.delete, "/")#">
   <cffile action="Delete" file="#imagesPath#thumb/#listLast(form.delete, "/")#">
  </cfoutput>
</cfloop>

**But I still get this error:

The destination "c:/domains/mredesign.com/wwwroot/MREcfCMS/images/original/ sampleJPG5.jpg,stress1.jpg" specified in the CFFILE tag is invalid.

See what I mean...?

That full path is coming from the variable #imagespath#...  but the filenames are still comma separated.
0
 
tim_csCommented:
Just a slight variation on what Plucka had that might work for you.


<cfloop index="file" list="#listLast(form.delete, "/")#">
  <cfoutput>
   <cffile action="Delete" file="#imagesPath#original/#file#">
   <cffile action="Delete" file="#imagesPath#full/#file#">
   <cffile action="Delete" file="#imagesPath#thumb/#file#">
  </cfoutput>
</cfloop>
0
 
PluckaCommented:
Sorry

Use the wrong variable in the listLast. This works.

<cfset form.delete = "C:/domains/thissite.com/wwwroot/images/img1.jpg, img2.jog, img3.jpg" />
<cfset imagesPath = "C:/domains/mredesign.com/wwwroot/MREcfCMS/images/" />

<cfloop index="fileName" list="#form.delete#" delimiters=",">
    <cfoutput>#imagesPath##trim(listLast(fileName, "/"))#<br /></cfoutput>
</cfloop>

NOTE: I added the trip as your list seems to have spaces.

This displays them so you can change the cfoutput for

<cfloop index="fileName" list="#form.delete#" delimiters=",">
   <cffile action="Delete" file="#imagesPath#original/ #listLast(fileName, "/")#">
   <cffile action="Delete" file="#imagesPath#full/#listLast(fileName, "/")#">
   <cffile action="Delete" file="#imagesPath#thumb/#listLast(fileName, "/")#">
</cfloop>

NOTE: You don't need the <CFOUTPUT around the <CFFILE
0
 
MichaelEvangelistaAuthor Commented:
perfect, thank you!
( except.. there is a space in your code after original/ in the first cffile, no prob to fix.)

NOW... how can I tell how many files were deleted?
I need to show the number of files on the confirmation.

Also, how can I tell how many checkboxes are checked on the initial page, with js or cf? I would like to show a message - Delete *4* files?

Here is the page now...
http://tinyurl.com/omlyl

thanks!


 
0
 
MichaelEvangelistaAuthor Commented:
OOPS you have to be logged in to see delete.
Click log out, then enter superadmin / superadmin,
then go to 'image list'


http://tinyurl.com/omlyl


sorry
0
 
MichaelEvangelistaAuthor Commented:
GOT the loop count working, so... good to go... thanks!!!
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 5
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now