• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

AS+ Shell- FTP Upload

  • Ersteller Mitglied 26876
  • Erstellt am

Mitglied 26876

Gast
Hallo Leute,

ich versuche jetzt seit einer geschlagenen Stunde ein paar Files auf einen FTP zu laden. Eigentlich ein Verzeichnis, was er hoch laden soll.
Nur weiß ich nicht genau wie und mit put -R kommt ein Error, versuche ich es mit dem local Pfad/* kommt wieder einer und joar, das Ganze schaut so aus:
Code:
-- Log vorbereiten

try
	do shell script "mkdir ~/Library/Scripts_folder"
	set Error1 to "0"
	--log_event("Das Erstellen des Hausaufgabenordners war erfolgreich") of LogScript
on error
	set Error1 to "Folder 'Scripts folder' exists already or failed"
end try
set LogDatei1 to ((path to resource "Logger.scpt") as string)
set LogDatei2 to quoted form of POSIX path of (LogDatei1)

do shell script "cp  " & LogDatei2 & " ~/Library/Scripts_folder/"


-- Log file erstellen in ~/Library/Logs/ mit Namen "Backup.log"
do shell script "touch ~/Library/Logs/Hausaufgaben.log"

delay 2

set LogScript to load script alias ¬
	((path to library folder from user domain as string) ¬
		& "Scripts_folder:Logger.scpt")

-- Bis herige Errors abfragen:
if Error1 is "Move the file Backup to desk failed" then
	log_event(Error1) of LogScript
else if Error1 is "" then
	log_event("Teil1 wurde erfolgreich abgeschlossen") of LogScript
end if


-- Dateien vorbereiten
try
	do shell script "mkdir ~/Library/Hausaufgaben/"
	log_event("Das erstellen des Ordners Hausaufgaben im Library Ordner des aktuellen Nutzers war erfolgreich") of LogScript
on error
	log_event("Das erstellen des Ordners Hausaufgaben im Library Ordner des aktuellen Nutzers schlug fehl!") of LogScript
	display dialog "Das erstellen des Ordners Hausaufgaben im Library Ordner des aktuellen Nutzers schlug fehl!" buttons {"Abbrechen"} with icon stop
end try

try
	do shell script "mkdir ~/Library/Hausaufgaben/HTML"
	log_event("Das erstellen des Ordners HTML im Library Ordner des aktuellen Nutzers war erfolgreich") of LogScript
on error
	log_event("Das erstellen des Ordners HMTL im Library Ordner des aktuellen Nutzers schlug fehl!") of LogScript
	display dialog "Das erstellen des Ordners HTML im Library Ordner des aktuellen Nutzers schlug fehl!" buttons {"Abbrechen"} with icon stop
end try


set HTML_Folder1 to ((path to resource "Start-HTML") as string)
set HTML_Folder2 to quoted form of POSIX path of (HTML_Folder1)

try
	do shell script "cp -r " & HTML_Folder2 & "/* ~/Library/Hausaufgaben/HTML/"
	log_event("Das Kopieren der Dateien aus dem Scriptbundle war erfolgreich") of LogScript
on error
	log_event("Das Kopieren der Dateien aus dem Scriptbundle schlug fehl!") of LogScript
	display dialog "Das Kopieren der Dateien aus dem Scriptbundle schlug fehl!" buttons {"Abbrechen"} with icon stop
end try

-- HTML Dateien hochladen
set HTML_Folder to ((path to library folder from user domain) ¬
	& ("Hausaufgaben:HTML:") as string)
set HTML_Stuff to ((every item of HTML_Folder) as list)


-- FTP Daten abfragen

set server_name to text returned of (display dialog "Bitte die Adresse des FTP-Servers eingeben! Ohne ftp oder http davor!" default answer "example.net")
log_event(server_name) of LogScript
set server_name_http to text returned of (display dialog "Bitte den Link zum Webserver angeben! MIT http:// und einem / beenden!" default answer "http://eusers.eu.funpic.de/")
log_event(server_name_http) of LogScript
set user_name to text returned of (display dialog "Bitte den FTP-Zugangsnamen für den Server " & server_name & " eingeben." default answer "")
log_event(user_name) of LogScript

set user_password to text returned of (display dialog "Bitte das FTP-Zugangspasswort für " & user_name & " auf dem FTP-Server " & server_name & " eingeben." default answer "" with hidden answer)

display dialog "Soll das FTP Passwort mit in die Log Datei geschrieben werden? Zum Beheben von Fehlern ist dies nützlich." buttons {"Abbrechen", "Nein", "Ja"}

set DlogResult to result
if button returned of result = "Nein" then
	log_event("Der User verweigerte es das Passwort zu sichern.") of LogScript
else if button returned of result = "Ja" then
	log_event("FTP Passwort:" & user_password) of LogScript
end if

try
	do shell script "HOST='" & server_name & "'
USER='" & user_name & "'
PASSWD='" & user_password & "'
FILE='~/Library/Hausaufgaben/HTML/*'
ZIEL='/Test/'

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
put  $FILE 
quit
exit 0
"
	log_event("Das Hochladen war erfolgreich") of LogScript
on error
	log_event("Das Hochladen schlug fehl!") of LogScript
	display dialog "Das Hochladen schlug fehl!" buttons {"Abbrechen"} with icon stop
	
end try


-- Fertige Datei upload Handler

on ftpFileUpload(server_name, path_to_item, ftp_user, ftp_password)
	set ftp_server to "ftp://ftp." & server_name & "/"
	set UploadFile to quoted form of POSIX path of (path_to_item)
	set theScript to "curl -u " & ftp_username & ":" & ftp_password & " -T " & UploadFile & " " & ftp_server
	do shell script theScript
end ftpFileUpload

In dieser Version kommt im Eventprotokoll:
Code:
do shell script "HOST='SERVER'
USER='USER'
PASSWD='PW'
FILE='~/Library/Hausaufgaben/HTML/*'
ZIEL='/Test/'

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
put  $FILE 
quit
exit 0
"
		"/Users/JaGaller/Library/Hausaufgaben/HTML/243.png: No such file or directory"

Und hier die Logdatei:
Code:
2009-09-14 04:12:48 Das erstellen des Ordners Hausaufgaben im Library Ordner des aktuellen Nutzers war erfolgreich
2009-09-14 04:12:48 Das erstellen des Ordners HTML im Library Ordner des aktuellen Nutzers war erfolgreich
2009-09-14 04:12:48 Das Kopieren der Dateien aus dem Scriptbundle war erfolgreich
2009-09-14 04:12:50 SERVER
2009-09-14 04:12:51 SERVER
2009-09-14 04:12:54 USER
2009-09-14 04:13:01 FTP Passwort:PASSWORT
2009-09-14 04:13:01 Das Hochladen war erfolgreich

Kann mir wer sagen was das soll?? Bzw. wie läufts?


Jan!
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
[tt]ftp[/tt] ist ein interaktives Tool und damit für Skripte nicht geeignet. Mit [tt]curl -T[/tt] wird daraus ein Einzeiler. Einfach mal in die [tt]man[/tt] page schauen.
Gruß Pepi
 

Mitglied 26876

Gast
Ja okay also ich kann das so nicht machen oder wie?! Das ist relativ blöd, weil ich insgesamt halt Upload und Download im AS brauche..
Der Upload sollte so laufen:
Code:
set i to every item in file_list

-- Alle Dateien hochladen

repeat with i in file_list
	ftpFileUpload(server_name, path_to_item, ftp_user, ftp_passwor, d)
end repeat

-- Fertige Datei upload Handler

on ftpFileUpload(server_name, path_to_item, ftp_user, ftp_password)
	set ftp_server to "ftp://ftp." & server_name & "/"
	set UploadFile to quoted form of POSIX path of (path_to_item)
	set theScript to "curl -u " & ftp_username & ":" & ftp_password & " -T " & UploadFile & " " & ftp_server
	do shell script theScript
end ftpFileUpload
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
Versuche nicht Dinge krampfhaft per AppleScript zu lösen (repeat with i) die beim [tt]curl[/tt] mit einer simplen RegExp gelöst werden können oder durch Übergabe von mehreren Parametern. Genaugenommen ist [tt]curl[/tt] alles was Du in dem Fall brauchen wirst.
Gruß Pepi
 

Mitglied 26876

Gast
Danke, der Uplaod geht schon mal:
Code:
try
	do shell script "curl -T ~/Library/Hausaufgaben/HTML/* -u " & user_name & ":" & user_password & " ftp://ftp." & server_name & ""
	log_event("Das Hochladen war erfolgreich") of LogScript
on error what
	log_event("Das Hochladen schlug fehl! Fehler:" & what) of LogScript
	display dialog "Das Hochladen schlug fehl!" & what buttons {"Abbrechen"} with icon stop
	
end try