Wysyłanie plików Delphi

Bakuśś

Użytkownik
Dołączył
Luty 2, 2012
Posty
3
To mój pierwszy post na tym form więc najpierw się przywitam :)

Piszę program, trojana a praktycznie jest on już prawie skończony. Jednak mam pewien problem z wysyłaniem plików. Do tej pory wysyłałem je na serwer FTP przy pomocy INDY jednak (przynajmniej na Windows 7) przy pierwszej próbie wysłania pliku potrzebne jest zezwolenie na połączenie z siecią, wyskakuje okienko takie jak na obrazku:

zezwolenie.png

Co zrobić by wysyłanie pliku przez program na Windows 7 (i Viście pewnie również) nie wymagało takiego zezwolenia? Może jest jakiś inny wygodny sposób na wysyłanie plików?

P.S Dodam, że do zalogowania się na gg czy np. pobrania jakiegoś pliku przez UrlDownloadToFIle program nie potrzebuje żadnych zezwoleń, tylko przy łączeniu z FTP jest ono wymagane.
 
Ostatnia edycja:

michal31337

Były Moderator
Dołączył
Październik 16, 2011
Posty
329
Użyj INDY HTTP, np. (metodę POST) i wrzucaj pliki przez skrypt PHP na serwer.
 
Ostatnia edycja:

Bakuśś

Użytkownik
Dołączył
Luty 2, 2012
Posty
3
Ok, skrypt w PHP uploadujący pliki już mam tylko teraz jak to połączyć z IdHTTP i POST?
 
Ostatnia edycja:

michal31337

Były Moderator
Dołączył
Październik 16, 2011
Posty
329
Sorry. POST, a nie GET. Mój błąd.
Możesz użyć mojego kodu:

var
PostDataStream : TStringStream;
ParamData : TStringStream;
User : String;
Buff: DWORD;
begin
Buff := 12;
SetLength(User, Buff);
GetUserName(PChar(User), Buff);

PostDataStream := TStringStream.Create('');
ParamData := TStringStream.Create('');
ParamData.WriteString('password=haslo');
ParamData.WriteString('&tresc=' + Memo1.Lines.Text);
ParamData.WriteString('&opis=' + User); // nazwa aktualnie zalogowanego usera
try
idhttp1.Post('http://adres.pl/skryptuploadujacy.php', ParamData, PostDataStream);

finally
ParamData.Free;
PostDataStream.Free;
Memo1.Lines.Clear;
end;
 

Bakuśś

Użytkownik
Dołączył
Luty 2, 2012
Posty
3
Udało mi się już samemu poszperać trochę w necie i stworzyć coś działającego :D Wstawię kod by inni też skorzystali:

// w uses dodajemy IdMultipartFormData

procedure TForm1.Button1Click(Sender: TObject);
var
Str : TIdMultipartFormDataStream;
begin

Str := TIdMultipartFormDataStream.Create;

try
IdHTTP1.HandleRedirects:=True;
Str.AddFile( 'plik','c:\plik.txt', 'multipart/form-data' );
IdHTTP1.Post( 'http://przyklad.pl/upload.php', Str );
finally
Str.Free;
end;

end;

A tu plik upload.php
(uploaduje pliki do folderu o nazwie "upload", który musi mieć atrybuty 777)

<?php
echo '<?xml version="1.0" encoding="iso-8859-2"?>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>Upload</title>
</head>
<body>

<div>
<form enctype="multipart/form-data" action="upload.php" method="POST">
<input name="plik" type="file" />
<input type="submit" value="Wyślij plik" />
</form>
</div>

<?php
if (!empty($_FILES))
{
$plik_tmp = $_FILES['plik']['tmp_name'];
$plik_nazwa = $_FILES['plik']['name'];
$plik_rozmiar = $_FILES['plik']['size'];

if(is_uploaded_file($plik_tmp)) {
move_uploaded_file($plik_tmp, "upload/$plik_nazwa");
echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze
<strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
}
}
?>
</body>
</html>
 
Ostatnia edycja:

garfield1

Użytkownik
Dołączył
Marzec 26, 2012
Posty
18
Czy na powyższym kodzie do php idzie wykonać skrypt za pomocą komponentu httpsend?
Plik php już w pełni gotowy i porawiony, lecz nie mam jak dać na formę komponentu, ponieważ nie mam formy, ani konsoli, ani WinAPI ;)

Dobra, czym już wiem tylko teraz jak?

Funkcja HttpPostFile, jakieś jej przykłady lub wytłumaczenie tych parametrów?
http://synapse.ararat.cz/doc/help/httpsend.html#HttpPostFile

Niezbyt wiem, np. czy FileName ma być wraz z ścieżką?
 
Ostatnia edycja:

ProQix

Użytkownik
Dołączył
Czerwiec 11, 2008
Posty
86
wiesz co to jest demo (taki folder) tam masz przykłady [source\demo\http] co jak można wykorzystać ale nie ***** trzeba brednie pisać na forum...
jak się ***** obrazka nie da położyć na forme to już sobie nie poradzisz... czy ty znasz podstawy, bo zabierasz się za coś nie mając o tym pojęcia np że w sekcji uses dopisujesz po przecinku httpsend ? nie ciężko wpaść na taki pomysł pewnie.
 
Ostatnia edycja:

garfield1

Użytkownik
Dołączył
Marzec 26, 2012
Posty
18
Zamiast tak się zwracać, wystarczyło napisać, że folder DEMO, szukałem w "DEMOS", lecz nie wiedziałem które z synapse, a teraz znalazłem w http w folderze "DEMO". Mam już dawno httpsend, dlatego wybrałem ten sposób, żeby nie zaśmiecać programu. Tyko jak się używa funkcji (przykład) prosiłem. Twoje nastawienie godne mianem "zaburzeniom osobowości".
 
Ostatnia edycja:
Do góry Bottom