Copy link to clipboard
Copied
Migating to a new server, and getting an error when uploading a new photo. Any help appreciated. Here is my code:
<cffile action="upload" filefield="Photo" destination="#ExpandPath ('../images/temp/')#" nameconflict="MakeUnique">
<cfset Photo = File.ServerFile>
<cfset NEWPHOTONAME = 'VE_' & '#dateformat(now(), 'yyyy_mm_dd_')#' & '#timeformat(now(), 'hh_mm_ss_')#' & '#photo#'>
<cffile action="rename" source ="#ExpandPath ('../images/temp/#photo#')#" destination="#ExpandPath ('../images/original/#NEWPHOTONAME#')#">
<cfset Photo = "#NEWPHOTONAME#">
Server doesn't like the #ExpandPath ('../images/temp/#photo#')# reference.
Error message: The value of the attribute source, which is currently C:/HOSTINGSPACES/virginia/virginiaequestrian.com/wwwroot/images/temp/IMG_2123.JPG, is invalid.
Checking the folder, the file was uploaded to the correct "temp" folder, and is in fact there. Any help appreciated!
Copy link to clipboard
Copied
So if you are on the server, and drop that value (C:/HOSTINGSPACES/virginia/virginiaequestrian.com/wwwroot/images/temp/IMG_2123.JPG) into the address bar of your browser, the image appears?
If not, it would seem there's something confusing you in thinking "it is there". If it DOES work, then it would be odd indeed that cf can't see it, since cf created it (on the upload).
In that case, you may want to assess what the permissions are for that folder, for the user running cf. If it's a service, does it show running as the user "local system" or something else?
Copy link to clipboard
Copied
My understanding is there are two different paths:
- one that is a URL, which could be pulled from the browser
- the other is the actual physical location of the file to be manipulated
On the old/current server, #ExpandPath ('../images/temp/')# renders
D:\Docs\VirginiaEquestrian\images\temp\
New server, #ExpandPath ('../images/temp/')# renders
C:\HOSTINGSPACES\virginia\virginiaequestrian.com\wwwroot\images\temp\
My guess is it could be a file folder permissions issue. Will check with my sys admin for his insights.
Copy link to clipboard
Copied
Here is my workflow:
1. Upload the file to a temp directory
2. Rename the file so that it is unique (I append the file name with date/time)
3. Deposit the newly named original into an "original" folder
4. Resize the file in the "original" folder into a thumbnail and full sized image (using ImageMagick)
5. Deposit the thumb/full sized image into the proper directories
My understanding is that I need to use ExpandPath to tell ImageMagick where the file actually lives on the server (not a relative URL)
Hopefully conveying this correctly. Again, any help appreciated.
Copy link to clipboard
Copied
And here is the URL to the file that was uploaded:
http://virginiaequestrian.com.wc05.domainhosting.net/images/temp/IMG_2123.JPG
Here is the location that is returned with the ExpandPath command:
C:/HOSTINGSPACES/virginia/virginiaequestrian.com/wwwroot/images/temp/IMG_2123.JPG
Putting that absolute path in a browser shouldn't work, and in fact does not.
Copy link to clipboard
Copied
It should work. Especially because the file was successfully uploaded.
In any case, I have two suggestions:
<cfset tempFolder=expandPath ('../images/temp')>
<cfset originalFolder=expandPath ('../images/original')>
<cffile action="upload" filefield="Photo" destination="#tempFolder#" accept="image/jpeg,image/jpg,image/pjpeg,image/png" nameconflict="MakeUnique" >
<cfset photoName = file.ServerFile>
<cfset photoSource = tempFolder & "/" & photoName>
<cfset newPhotoName = 'VE_' & dateformat(now(), 'yyyy_mm_dd_') & timeformat(now(), 'hh_mm_ss_') & photoName>
<cfset photoDestination = originalFolder & "/" & newPhotoName>
<cffile action="rename" source ="#photoSource#" destination="#photoDestination#">
Copy link to clipboard
Copied
Chuck, you have misunderstood me. See the first sentence in my first comment: "So if you are on the server, and drop that value...into the address bar of your browser, the image appears?"
You were saying that the value (used as the SOURCE for the rename) DOES exist, though CF said it was "invalid".
My suggestion was a way to prove whether it DOES exist, and then to help perhaps identify where the problem may be.
Copy link to clipboard
Copied
Hi Charlie,
Thank you for your insights and input. I have worked through many of the issues, and am able to successfully upload an image, copy it to the proper directory. Now I am running into an issue that seems to be tied to cfexecute. I am using ImageMagick to resize the images, and this issue seems to be tied to this operation.
The following is the internal exception message: access denied ("coldfusion.tagext.GenericTagPermission" "cfexecute")
java.security.AccessControlException: access denied ("coldfusion.tagext.GenericTagPermission" "cfexecute")
Thank you for any input or advice.
Copy link to clipboard
Copied
Glad you got the other issues sorted.
And as for that error, sadly it's what you get when the person running the CF server has restricted the ability to use that tag, which can be done in the CF Admin via its Security>Sandbox Security page (or in older CF versions, it was called "Resource Security" in CF Standard). Whether you will be able to use it depends on a few things...
Is this a shared host you are on? If so, I doubt they will allow for you to use it, as it's regarded as being potentially dangerous.
If it's an organizational server, perhaps you could persuade the person responsible for the CF Admin.
I will note that the sandbox security feature can either be configured to apply to ALL CF apps, or it can be configured to allow for use of a specific tag like that (which might otherwise be blocked) if it's run from a specific directory that has been given permission (in the CF Admin, sandbox security configuration).
Again, if you're on a shared host, I doubt they will do it. In an organizational server, they may be persuaded. They may also think "it can't be done" for CF Standard, if that's the license they have, but that limitation was lifted from being Enterprise-only in CF11.
Hope that helps.
Copy link to clipboard
Copied
Thanks Charlie,
You are awesome for the quick responses. From what I'm seeing, it looks like I can avoid using ImageMagick, which we used "back in the day" to resize photos, rotate them, etc. It looks like I can most likely get the same results using cfimage, so I'm going to dive in.
Very much appreciate your input. Invaluable!
Cheers,
Chuck
Copy link to clipboard
Copied
Thanks for the kind regards, Chuck. And yep, most find that the image processing in CFML suffices to replace 3rd party solutions folks have long used. Of course, sometimes there may be some specific thing they want that the CF feature does NOT add. To each their own, and nice that we can have choices. 🙂
I will say that as you explore the world of CF's image processing, do beware that there can be a performance problem due to their decision (in CF8) to make the default "interpolation" to be "highestquality", which can really slow down some image processing--for what is to most eyes a negligble visual benefit. The opposite value is "highestperformance", and there are other values between. This is supported as an attribute in some CFIMAGE actions and as an arg in some of the image functions. For more, see a post I did some years ago, which still applies today.
Copy link to clipboard
Copied
I have worked through many of the issues, and am able to successfully upload an image, copy it to the proper directory.
By @chuckebbets2
I am glad to hear that. Would you, for the benefit of the forum, please share your solution. It will certainly help a fellow developer in future.
Now I am running into an issue that seems to be tied to cfexecute. I am using ImageMagick to resize the images, and this issue seems to be tied to this operation.The following is the internal exception message: access denied ("coldfusion.tagext.GenericTagPermission" "cfexecute")
java.security.AccessControlException: access denied ("coldfusion.tagext.GenericTagPermission" "cfexecute")
There is an alternative cause, if it is not the sandboxing that Charlie mentioned. It is likely that your code is trying to gain unauthorized access to a file or folder of the Operating System. Could you share the code?
Copy link to clipboard
Copied
I am using CF_MagickTag - it calls the ImageMagick application. Long story, but its used to manipulate images. I have achieved the same end results (resizing, allowing the user to rotate the image, etc) with cfimage. All good in the hood!
Copy link to clipboard
Copied
BKBK, I'm almost 100% certain tha tthat error message (about generic tagpermission) is ONLY if the tag is itself blocked by the sandbox/resource security, rather than being about inability to access any file named in the tag (or in this case, the path to the command being executed in cfexecute, or any file it is accessing).
But if anyone somehow finds otherwise, please do share.
Copy link to clipboard
Copied
Charlie, I do believe <cfexecute> is designed to throw a java.security.AccessControlException if the user that ColdFusion is running as doesn't have the required access or permission to do the "execute".