Upload given file or folder (mirroring structure) to a FTP directory.
If you pass folder “foo” (with files “a” and “b”) to be uploaded to folder “bar”, you will see the following:
bar/
a
b
If you pass folder “foo” containing file “x” and folder “foo2” (which contains “a” and “b”) to be uploaded to folder “bar”, you will see:
bar/
x
foo2/
a
b
OS version: OS X
(*
upload
Uploads the given file or folder to the given remote ftp folder using "curl".
If you need user/password to login to such server, append it to the URL. Eg:
ftp://user:password@ftp.server.com/dir/
Parameters:
filePath: file path, alias, posix path (a file or folder)
remoteDir: ftp directory (eg: "ftp://ftp.server.com/foo/" or "ftp://user:password@ftp.server.com/dir/")
Example:
upload(alias "path:to:dir:", "ftp://usernameHERE:passwordHERE@ftp.serverHERE.com/html/docs/")
*)
to upload(filePath, remoteDir)
global baseLocalFolder, baseRemoteFolder, ftpHome, ftpDir
script nesteed
to guessNewDir(f) -- "/path/to/footest" --> /footest
set prevTids to AppleScript's text item delimiters
set AppleScript's text item delimiters to POSIX path of parent's baseLocalFolder
set f to item -1 of f's text items
set AppleScript's text item delimiters to prevTids
return f
end guessNewDir
to breakURL(d) --> "ftp://user:pass@ftp.server.com/html/docs/" --> {"ftp://user:pass@ftp.server.com", "/html/docs"}
set prevTids to AppleScript's text item delimiters
set AppleScript's text item delimiters to "/"
set ftpHome to "" & items 1 thru 3 of d's text items
try
set ftpDir to "/" & items 4 thru -1 of d's text items
on error
set ftpDir to "/"
end try
set AppleScript's text item delimiters to prevTids
return {ftpHome, ftpDir}
end breakURL
to processUnknownItem(f, remoteDir)
set f to f as text
if f ends with ":" then
processFolder(f, remoteDir)
else
do shell script "curl -T " & quoted form of POSIX path of f & space & quoted form of remoteDir
end if
end processUnknownItem
to processFolder(f, remoteDir)
set newDir to guessNewDir(POSIX path of f) --> "/footest"
try --> avoid existing dirs
if newDir is not "" then do shell script "curl -Q " & quoted form of ("MKD " & parent's ftpDir & newDir) & space & parent's ftpHome
end try
set itemList to list folder alias f without invisibles
repeat with i in itemList
processUnknownItem(alias (f & i), parent's ftpHome & parent's ftpDir & newDir)
end repeat
end processFolder
end script
set wasError to false
try
set filePath to filePath as Unicode text
if filePath does not contain ":" then set filePath to POSIX file filePath as Unicode text
if remoteDir does not end with "/" then set remoteDir to remoteDir & "/"
if filePath ends with ":" then --> mirror dir
-- MAKE DIRECTORY "TEST" IN EXISTING "/HTML/DOCS"
-- curl -Q "MKD /html/docs/test" ftp://user:pass@ftp.server.com
set baseLocalFolder to filePath
set baseRemoteFolder to remoteDir
set {ftpHome, ftpDir} to breakURL(remoteDir) of nesteed --> {"ftp://user:pass@ftp.server.com", "/html/docs"}
processFolder(filePath, remoteDir) of nesteed
else
do shell script "curl -T " & quoted form of POSIX path of filePath & space & quoted form of remoteDir
end if
on error msg number n
set wasError to true
end try
set baseLocalFolder to missing value
set baseRemoteFolder to missing value
set ftpHome to missing value
set ftpDir to missing value
if wasError then error msg number n
return
end upload
property |version| : 1.0
property author : "Pescados Software @ PescadosWeb.com"
property |date| : date "sábado, 17 julio 2004 22:20:27"
property license : "freeware, open-source"