PDA

View Full Version : rename file after uploading it


ABC123

Jay Talbott
09-19-2009, 03:35 PM
I am having problems renaming a file after uploading it.
I currently have:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%a5
dim msg as c = ""
if eval_valid("cmd")
file.from_blob(ServerSetting.Document_Root + "\\" + FileToUpload.filename, FileToUpload.data)
msg = "<a href=\"/" + FileToUpload.filename + "\" target=\"_blank\">" + FileToUpload.filename + "</a> was uploaded<br /><br />"
msg = msg + crlf()+"file renamed to jat_test_091909.jpg"
end if
if eval_valid("cmd")
file.rename(FileToUpload.filename,"jat_test_091909.jpg")
end if
%>

<head>
<title>File Upload example</title>
</head>
<body bgcolor="#ffffff">
<form action=" <%a5 ? request.script_name %> " method="POST" enctype="multipart/form-data">
<input type="file" name="FileToUpload" value="" size="50"><br />
<input type="submit" name="cmd" value="Upload File">
</form>
<br>
<br>

<%a5 ? msg %>
</body>
</html>

with the new file name hardcoded (to be later replaced by an account name).
When I try and run this, I get:

500 Internal Server Error
"Script Error
Error:Script: /image_map/upload_file.a5w line:11
file.rename(FileToUpload.filename,"jat_test_091909.jpg")
The system cannot find the file specified.
C:\A5Webroot\image_map\jat_test_091909.jpg"

What am I doing wrong?
Any help would be appreciated.
Thanks,
Jay

Pat Bremkamp
09-19-2009, 04:58 PM
Jay, if possible, it's easier to rename the file before you save it instead of after.

This isn't exactly your case, but it may help. In this script, I'm uploading 6 photos for a real estate listing, and I'm renaming them with the listing id and a number from 1 to 6, then saving the path and name in an Image File Reference field.



Dim vMsg1 as C = "Upload Property Photos. Photos must be jpg type, not more than 600 pixels wide or 450 pixels high."
vFilename=alltrim(session.listing_id)+"."+alltrim(session.which)+".jpg"
if eval_valid("cmd")
file.from_blob("[PathAlias.Photos]"+chr(92)+vFilename, FileToUpload.data)
fn="[PathAlias.Photos]"+chr(92)+vFilename
vMsg1 = "Photo "+FileToUpload.filename+" was uploaded as "+vFilename+"."
tbl=table.open("[PathAlias.ADB_Path]\listings.dbf")
indx=tbl.index_primary_put("listing_id")
vRecNo=tbl.fetch_find(session.listing_id)
if vRecNo>0 'was found
tbl.change_begin()
select
case session.Which="1"
tbl.Photo1=fn
case session.Which="2"
tbl.Photo2=fn
case session.Which="3"
tbl.Photo3=fn
case session.Which="4"
tbl.Photo4=fn
case session.Which="5"
tbl.Photo5=fn
case session.Which="6"
tbl.Photo6=fn
end select
tbl.change_end()
end if
tbl.close()
end if

Jay Talbott
09-24-2009, 05:41 PM
Pat,
Thanks so much for the suggestion.
How would you handle this if all of the files were not getting uploaded at once? In your case, for example, (and I know this would probably not happen in a real estate listing, but for the sake of discussion) if one or two photos were already uploaded and the Realtor wanted to upload three more, how would you know if there were already two files on the server?
Thanks.
Jay

mumfie
09-24-2009, 07:11 PM
Assuming you want to retain each file uploaded a unique filename could be generated.

You need to consider the number of simultaneous users, number of files, file size etc.

Some possible options are

#1 - include a sequential number as part of filename and use the filefind.get function or similar to determine the next number t allocate from those already uploaded to the upload directory. The filename can also include the userid to identify who uploaded a particular file.

#2 - add a record to a database table each time a file is uploaded and use an autoincrement type field witin table to determine filename.

#3 - generate a filename that includes userid upload date time etc. The time precision would need to be decided to prevent possible conflicts.