Solved

Delete multiple files with CFFILE

Posted on 2006-07-12
9
329 Views
Last Modified: 2013-12-24
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
Comment
Question by:MichaelEvangelista
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 3
9 Comments
 
LVL 18

Expert Comment

by:Plucka
ID: 17097311
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
 

Author Comment

by:MichaelEvangelista
ID: 17097369
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
 
LVL 18

Expert Comment

by:Plucka
ID: 17097393
No,

My example will work just fine.

Try it

Regards
Plucka
0
Database Solutions Engineer FAQs

In this series, we will discuss common questions received as a database Solutions Engineer at Percona. In this role, we speak with a wide array of MySQL and MongoDB users responsible for both extremely large and complex environments to smaller single-server environments.

 

Author Comment

by:MichaelEvangelista
ID: 17097476
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
 
LVL 15

Expert Comment

by:tim_cs
ID: 17097892
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
 
LVL 18

Accepted Solution

by:
Plucka earned 250 total points
ID: 17098026
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
 

Author Comment

by:MichaelEvangelista
ID: 17111157
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
 

Author Comment

by:MichaelEvangelista
ID: 17111559
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
 

Author Comment

by:MichaelEvangelista
ID: 17111633
GOT the loop count working, so... good to go... thanks!!!
0

Featured Post

Optimize your web performance

What's in the eBook?
- Full list of reasons for poor performance
- Ultimate measures to speed things up
- Primary web monitoring types
- KPIs you should be monitoring in order to increase your ROI

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Lease-to-own eliminates the expenditure of hardware replacement and allows you to pay off the server over time. Usually, this is much cheaper than leasing servers. Think of lease-to-own as credit without interest.
When it comes to security, close monitoring is a must. According to WhiteHat Security annual report, a substantial number of all web applications are vulnerable always. Monitis offers a new product - fully-featured Website security monitoring and pr…
Monitoring a network: why having a policy is the best policy? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the enormous benefits of having a policy-based approach when monitoring medium and large networks. Software utilized in this v…
If you’ve ever visited a web page and noticed a cool font that you really liked the look of, but couldn’t figure out which font it was so that you could use it for your own work, then this video is for you! In this Micro Tutorial, you'll learn yo…

623 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question