webForumDet fria alternativet

FTP upload/download...?

12 svar · 431 visningar · startad av FreeZer

FreeZerMedlem sedan jan. 2001950 inlägg
#1

Det jag försöker göra är en EXE-fil som ska ladda ner/upp filer till ftp-adresser.

Information som skickas till filen ska vara:
* info om den ska ladda upp eller ladda ner
* adress med login ("ftp://login:pass@ip.com:123/mapp")
* en mapp på hårddisken ("C:\viktiga_filer\")

om den ska ladda ner ska den ladda ner allt som ligger på den adressen och stoppa det i mappen, om den ska ladda upp så laddar den upp alla filer som ligger i mappen till ftpn

jag har kollat på flera exempel på ftp program, men jag får inget att fungera, så jag undrar om någon kan hjälpa mig med detta...?

SBMedlem sedan maj 2000194 inlägg
#2

Denna komponent kanske är det du söker. Har dock inte testat den själv men den fungerar säkert kalas.

http://www.marshallsoft.com/fce4d.htm

SBMedlem sedan maj 2000194 inlägg
#3

Hej igen!

Du kan också använda dig av NMFTP-komponenten som du hittar under FastNet-fliken (Delphi 6 Ent). Ett komplett kodexempel för att ladda upp/ned filer med hjälp av denna komponent finns i Delphihjälpen.

FreeZerMedlem sedan jan. 2001950 inlägg
#4

Jag kör Delphi 7 och jag kan inte hitta den komponenten... :(

HardrockerMedlem sedan nov. 2003310 inlägg
#5

I Delphi 7 Enterprise så har du TidFTP spm du kan använda dig av. Du hittar den under Indy Clients fliken.

FreeZerMedlem sedan jan. 2001950 inlägg
#6

Jag har suttit och kollat på TidFTP men jag lyckas inte få till något... Ingen som har en länk till någon sida där man på ett enkelt sätt kan skapa upp och ner laddning via ftp? Fungerande exempel mm...

SBMedlem sedan maj 2000194 inlägg
FreeZerMedlem sedan jan. 2001950 inlägg
#8

Jag har fått till programmet så att den kan ladda upp filer på ftp:er... Men jag har en till fråga

Om jag startar EXE-filen från cmd genom att skriva som nedan så läser jag in informationen och använder den i programmet.

Project1.exe "login" "pass" "ip.com" "21"

Men problemet är hur jag ska kunna öppna filen på detta sätt från en annan EXE-fil? För sättet jag testat på fungerar inte:

ShellExecute(Handle, 'open',pchar('Project1.exe "login" "pass" "ip.com" "21"'),nil,nil, SW_SHOWNORMAL);

Om jag skriver in Project1.exe "login" "pass" "ip.com" "21" i "kör" så startar den inte heller programmet.

HardrockerMedlem sedan nov. 2003310 inlägg
#9

Koden borde se ut så här:

ShellExecute(Handle, 'open',pchar('Project1.exe login pass ip.com 21'),nil,nil, SW_SHOWNORMAL);

om du lägger login och pass i strängvariabler så ska koden så ut så här:

ShellExecute(Handle, 'open',pchar('Project1.exe' + strlogin + strPass + 'ip.com 21'),nil,nil, SW_SHOWNORMAL);

när du startar programmet i kör så test att skriv så här:

project1.exe login pass ip.com 21

/Ante

FreeZerMedlem sedan jan. 2001950 inlägg
#10

Jag får det att funka i kör men inte från ett annat program.

Här händer ingenting:

ShellExecute(Handle, 'open',pchar('Project1.exe login pass ip.com 21'),nil,nil, SW_SHOWNORMAL);

Om jag startar såhär så fungerar det:

ShellExecute(Handle, 'open',pchar('Project1.exe'),nil,nil, SW_SHOWNORMAL);
  //kontakten med ftpn
  idftp1.connect(true,3000);

  //skapar alla mappar som behövs
  for i := 0 to listbox2.items.Count - 1 do begin
    try idftp1.MakeDir(listbox2.items[i]); except end;
  end;

  //laddar upp alla filer
  for i := 0 to listbox1.items.Count - 1 do begin
    IdFTP1.Put(mapp+listbox1.Items[i],listbox1.items[i]);
  end;
  idftp1.Quit;

Som du ser här har jag alla mappar upplistade i listbox2 och alla filer med sökväg upplistade i listbox1. Med denna kod som kan jag logga in på ftpn och loopen när den skapar mappar fungerar utan problem, jag får alla mappar på ftpn som de ska se ut. Men när den ska börja ladda upp filerna så hänger sig programmet och drar 100% CPU tills man avbryter den. Om man kollar på ftploggen så ser den ut som följande:

ftpn skrev:

2004-10-20 11:27:25 - login (xxx.xxx.xxx.xxx) > asked to create dir 'E:\ftptest\tempftpupload\Ny mapp\Ny mapp' --> Access allowed.
2004-10-20 11:27:25 - login (xxx.xxx.xxx.xxx) > made dir 'Ny mapp' in 'E:\ftptest\tempftpupload\Ny mapp\'.
2004-10-20 11:27:25 - login (xxx.xxx.xxx.xxx) > 257 '/tempftpupload/Ny mapp/Ny mapp': directory created.
2004-10-20 11:27:25 - login (xxx.xxx.xxx.xxx) > PORT 192,168,2,139,9,255
2004-10-20 11:27:25 - login (xxx.xxx.xxx.xxx) > 200 Port command successful.
2004-10-20 11:27:25 - login (xxx.xxx.xxx.xxx) > STOR \dft373_25.iso
2004-10-20 11:27:25 - login (xxx.xxx.xxx.xxx) > asked to upload '\dft373_25.iso' in 'E:\ftptest\' --> Access allowed.
2004-10-20 11:27:25 - login (xxx.xxx.xxx.xxx) > 150 Opening data connection for dft373_25.iso.
2004-10-20 11:27:40 - login (xxx.xxx.xxx.xxx) > 226 File received ok.
2004-10-20 11:27:40 - login (xxx.xxx.xxx.xxx) > finished uploading '\dft373_25.iso' in 'E:\ftptest\' - (11:27:41 - -0,001 KB - 0,000 KBytes/s).

Ftpn säger att filen är uppladdad men jag kan inte så någon fil på ftpn och programmet ligger och drar 100% CPU utan att skicka någon mer information till ftpn.

Måste tillägga att denna kod fungerar utmärkt om jag kör programmet på samma dator som ftpn ligger på, men när jag kör programmet från en annan dator så blir det fel vid filuppladdningen.

HardrockerMedlem sedan nov. 2003310 inlägg
#11

Jag brukar använda mig av CreateProcess när jag startar externa program och där är det lugnt att skicka med parametrar.

När du kör programmet från en annan dator. Får du kontakt med servern eller är det själva uppladdningen av filen som blir fel?

FreeZerMedlem sedan jan. 2001950 inlägg
#12

Jag själv skrev:

Som du ser här har jag alla mappar upplistade i listbox2 och alla filer med sökväg upplistade i listbox1. Med denna kod som kan jag logga in på ftpn och loopen när den skapar mappar fungerar utan problem, jag får alla mappar på ftpn som de ska se ut. Men när den ska börja ladda upp filerna så hänger sig programmet och drar 100% CPU tills man avbryter den.

Det går bra att logga in, skapa mappar, ta bort mappar och to bort filer men just inte att ladda upp. Det är då den låser sig och drar 100% CPU (du kan kolla loggen ftp-servern skriver utan att fått någon fil uppladdad).

Om jag testar på detta sätt så blir det samma resultat:

if opendialog1.execute then IdFTP1.Put(opendialog1.Filename,Extractfilename(opendialog1.filename));
FreeZerMedlem sedan jan. 2001950 inlägg
#13

Jag testade ladda ner denna: "Transférer un fichier par FTP" från http://delphipage.free.fr/internet.html

Det är en uploadkod skriven med indy. Jag får samma fel här, programmet hänger sig och drar 100% CPU när den ska ladda upp filen... Någon som vet vad det är för fel då? Denna kod borde väl vara skriven på ett sätt så att den fungerar?

På denna dator som det inte fungerar ifrån sitter jag bakom ett trådlöst nätverk med router. Inga övriga problem med internet.

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)