Варианты отправки файла (или как слить файл с компьютера?)
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Варианты отправки файла (или как слить файл с компьютера?) - 2011-01-28 13:43:50.776666
|
|
|
GangstaLC
Сообщений: 71
Оценки: 0
Присоединился: 2009-10-11 20:55:22.796666
|
Тренируюсь в написании небольшой программки (пишу на делфи, но в этом вопросе это не принципиально), нужно слить файл с одного компьютера на другой. Хочу услышать ваши идеи каким образом это можно осуществить? (к примеру загрузка файла на ftp сервер и подобное) Вообще хочется узнать какие способы будут наиболее стабильными.
|
|
|
RE: Варианты отправки файла (или как слить файл с компьютера?) - 2011-01-28 15:18:34.470000
|
|
|
Genco
Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
|
Нубский способ - отправить по мылу. Просто, но плохо. Обычно делается где-то на хосте скрипт-приемник и шлется туда, на него то,что нужно. Один из лучших, потому что информацию забрать сможешь только ты. В крайнем случае можно отправить себе по асе файл, но это изврат.
|
|
|
RE: Варианты отправки файла (или как слить файл с компьютера?) - 2011-01-28 17:07:45.466666
|
|
|
GangstaLC
Сообщений: 71
Оценки: 0
Присоединился: 2009-10-11 20:55:22.796666
|
quote:
ORIGINAL: Genco Нубский способ - отправить по мылу. Просто, но плохо. Обычно делается где-то на хосте скрипт-приемник и шлется туда, на него то,что нужно. Один из лучших, потому что информацию забрать сможешь только ты. В крайнем случае можно отправить себе по асе файл, но это изврат. Про отправку на мыло я подумал, но способ мне не очень нравится, я к примеру могу быть в оффлайне во время отправки (ждать пока я выйду в онлайн? Ставить бота приемщика не дедик? не пойдет)) ), а вот по поводу скрипта-приемника, фактически загрузка ведь на фтп идет? чем это лучше прямого залива на фтп сервер?
|
|
|
RE: Варианты отправки файла (или как слить файл с компьютера?) - 2011-01-28 17:38:33.363333
|
|
|
northsoft
Сообщений: 25
Оценки: 0
Присоединился: 2007-12-20 10:05:03.033333
|
Зарегайся на PHP-хостинге, напиши PHP-скрипт, который будет сохранять отправляемые файлы. Через POST-запрос в Indy отправляй по HTTP файлы. Если нужна помощь — стучи в аську.
|
|
|
RE: Варианты отправки файла (или как слить файл с компьютера?) - 2011-01-28 21:49:08.790000
|
|
|
Genco
Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
|
При чем тут онлайн. Придет письмо на почту и будет лежать. Но уже была даже ситуация на форуме - из таких поделок пароль вытащить легко. Потому и фтп-сервер подходит плохо. Ниже правильно написал: обычно делается гейт на PHP.
|
|
|
RE: Варианты отправки файла (или как слить файл с компьютера?) - 2011-01-29 16:26:42.116666
|
|
|
class0071
Сообщений: 300
Оценки: 0
Присоединился: 2011-01-27 17:15:23.750000
|
quote:
ORIGINAL: Genco Нубский способ - отправить по мылу. Просто, но плохо. Обычно делается где-то на хосте скрипт-приемник и шлется туда, на него то,что нужно. Один из лучших, потому что информацию забрать сможешь только ты. В крайнем случае можно отправить себе по асе файл, но это изврат. Воспользуйся скрытой отправки письма с приклепленным файлом. P.S. Если надо, написать могу и кинуть сюды исходник. P.S.S. Поддерживаюсь к постам Genco. Через почту лучше.
|
|
|
RE: Варианты отправки файла (или как слить файл с компьютера?) - 2011-01-29 18:22:11.450000
|
|
|
GangstaLC
Сообщений: 71
Оценки: 0
Присоединился: 2009-10-11 20:55:22.796666
|
quote:
ORIGINAL: class0071 quote:
ORIGINAL: Genco Нубский способ - отправить по мылу. Просто, но плохо. Обычно делается где-то на хосте скрипт-приемник и шлется туда, на него то,что нужно. Один из лучших, потому что информацию забрать сможешь только ты. В крайнем случае можно отправить себе по асе файл, но это изврат. Воспользуйся скрытой отправки письма с приклепленным файлом. P.S. Если надо, написать могу и кинуть сюды исходник. P.S.S. Поддерживаюсь к постам Genco. Через почту лучше. Способ с почтой я использовать не хочу, возьму php гейт. P.S. а от исходников с аттачем файла не откажусь, выложи пожалуйста. quote:
ORIGINAL: Genco При чем тут онлайн. Придет письмо на почту и будет лежать. Но уже была даже ситуация на форуме - из таких поделок пароль вытащить легко. Потому и фтп-сервер подходит плохо. Ниже правильно написал: обычно делается гейт на PHP. Онлайн - в случае отправке файла по ICQ. Про почту ясно, но как уже сказал выше, мне этот способ не очень нравится. Про гейт на PHP я подумывал, но написал для того чтобы всетаки спросить, может есть более лучшии варианты) Остановлюсь на нем. Да и про ftp я подумывал что пароль будет нетрудно вытащить) quote:
ORIGINAL: northsoft Зарегайся на PHP-хостинге, напиши PHP-скрипт, который будет сохранять отправляемые файлы. Через POST-запрос в Indy отправляй по HTTP файлы. Если нужна помощь — стучи в аську. Спасибо за помощь) PHP хостинг есть, написать гейт и POST запрос в общем то не сложно. Хотя загрузку файлов по php не делал) Если не трудно, выложите плз исходники загрузки файла на сервер с компьютера на php) В общем, спасибо всем за ответы, вопрос решен.
|
|
|
RE: Варианты отправки файла (или как слить файл с компьютера?) - 2011-01-29 19:25:42.140000
|
|
|
class0071
Сообщений: 300
Оценки: 0
Присоединился: 2011-01-27 17:15:23.750000
|
quote:
ORIGINAL: GangstaLC P.S. а от исходников с аттачем файла не откажусь, выложи пожалуйста. http://dump.ru/file/5045104 SendMail_Source.pas { Coded by class0071 }
unit SendMail_Source;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdMessage, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP;
type
TForm1 = class(TForm)
IdSMTP1: TIdSMTP;
IdAntiFreeze1: TIdAntiFreeze;
IdMessage1: TIdMessage;
procedure FormClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormClick(Sender: TObject);
var
Att: TIdAttachment;
begin
IdSMTP1.Host:='smtp.yandex.ru'; // примеры: smtp.rambler.ru, smtp.mail.ru и т.п.
IdSMTP1.Username:='имя_почтового_ящика_куда_будет_отправляться_письмо_например: delphi@yandex.ru';
IdSMTP1.Password:='пароль_почтового_ящика_куда_будет_отправляться_письмо';
IdMessage1.Subject:='тема письма';
IdMessage1.Body.Text:='текст тела письма';
IdMessage1.From.Address:='от кого отправляем: qwerty@yandex.ru';
IdMessage1.From.Name:='имя отправителя';
IdMessage1.Recipients.EMailAddresses:='кому отправляем: delphi@yandex.ru';
Att:=TIdAttachment.Create(IdMessage1.MessageParts,'путь до файла(например: C:\FileName.exe)'); // вложение в письмо
IdSMTP1.Connect(); // подключаемся
if IdSMTP1.Connected=true then
begin
IdSMTP1.Send(IdMessage1); // если подключились, то отправляем письмо и отключаемся.
IdSMTP1.Disconnect;
end;
end;
end.
|
|
|
RE: Варианты отправки файла (или как слить файл с компьютера?) - 2011-02-01 23:24:45.233333
|
|
|
GangstaLC
Сообщений: 71
Оценки: 0
Присоединился: 2009-10-11 20:55:22.796666
|
Можно ли с помощью компонента IdHTTP, послать файл на php гейт? Если возможно, прошу привести пример) P.S. пробывал пихать файл в потоки, а потом посылать запрос - что то не получается.(
|
|
|
RE: Варианты отправки файла (или как слить файл с компьютера?) - 2011-02-02 00:07:58.216666
|
|
|
Genco
Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
|
Сам обычно пользуюсь таким найденным куском кода.
function SendFile(filename:string):string;
var
sock : dword;
ca : sockaddr_in;
HTTPHeader : string;
boundary : string;
fs:dword;
hFile : DWORD;
buf : array [0..4095] of char;
p : PHostEnt;
rb : cardinal;
len : integer;
SubHeader1 : string;
SubHeader2 : string;
begin
result := '';
// открываем файл на чтение
hFile := CreateFile(PChar(filename), GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if hFile <> INVALID_HANDLE_VALUE then // если всё норм
begin
fs := GetFileSize(hFile, nil); // получим размер файла
// создаем сокет
sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
// если создался сокет
if (sock <> INVALID_SOCKET) then // если норм
begin
ca.sin_family := AF_INET;
ca.sin_port := htons(80); // порт
p := GetHostByName(PChar(host)); // получим ip по домену
if p = nil then // если нету
begin
// значит это IP
ca.sin_addr.s_addr := inet_addr(pchar(host));
end
else
begin
// выдерем ip
ca.sin_addr := PInAddr(p.h_addr_list^)^;
end;
//соединяемся
if connect(sock, ca, sizeof(ca)) <> -1 then
begin
// если всё в порядке
// создадим разделитель
boundary := inttohex(random(65535), 4)+inttohex(random(65535), 4)+inttohex(random(65535), 4);
// создаем части HTTP заголовка
SubHeader1 := '--'+boundary+#13#10+
'Content-Disposition: form-data; name="myfile"; filename="'+filename+'"'#13#10+
'Content-Type: application/octet-stream'#13#10#13#10;
SubHeader2 := #13#10+'--'+boundary+'--'#13#10;
HTTPHeader := 'POST '+gate+' HTTP/1.1'#13#10+
'Host: '+host+#13#10+
'Connection: close'#13#10+
'Content-Type: multipart/form-data; boundary='+boundary+#13#10+
'Content-Length: '+inttostr(fs + length(SubHeader1) + length(SubHeader2))+#13#10#13#10+SubHeader1;
// посылаем заголовок
send(sock, HTTPHeader[1], length(HTTPHeader), 0);
while true do
begin
rb := 0;
// читаем 4 кб из файла
ReadFile(hFile, buf, 4096, rb, nil);
if rb = 0 then break; // если не считалось то выход из цикла
send(sock, buf, rb, 0); // пошлем считанные данные
end;
// пошел последний разделитель
send(sock, SubHeader2[1], length(SubHeader2), 0);
while true do // к цикле ждем ответа от сервера
begin
len := recv(sock, buf, 4096, 0); // считали данные
if len > 0 then // если есть чтото
begin
result := result + copy(buf, 0, len);
end
else
begin // если нет больше данных то выходим из цикла
break;
end;
end;
end;
closesocket(sock); // закрываем сокет
end;
CloseHandle(hFile); // закрываем файл
end;
end;
Если хочешь - нагугли посылку запроса с помощью компонента. Такой же POST отправлять будешь, только всё сведется к формированию строки, остальное сделает метод)
|
|
|
RE: Варианты отправки файла (или как слить файл с компьютера?) - 2011-02-02 07:44:25.786666
|
|
|
GangstaLC
Сообщений: 71
Оценки: 0
Присоединился: 2009-10-11 20:55:22.796666
|
quote:
ORIGINAL: class0071 quote:
ORIGINAL: GangstaLC P.S. а от исходников с аттачем файла не откажусь, выложи пожалуйста. http://dump.ru/file/5045104 SendMail_Source.pas { Coded by class0071 }
unit SendMail_Source;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdMessage, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP;
type
TForm1 = class(TForm)
IdSMTP1: TIdSMTP;
IdAntiFreeze1: TIdAntiFreeze;
IdMessage1: TIdMessage;
procedure FormClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormClick(Sender: TObject);
var
Att: TIdAttachment;
begin
IdSMTP1.Host:='smtp.yandex.ru'; // примеры: smtp.rambler.ru, smtp.mail.ru и т.п.
IdSMTP1.Username:='имя_почтового_ящика_куда_будет_отправляться_письмо_например: [email=delphi@yandex.ru]delphi@yandex.ru[/email]';
IdSMTP1.Password:='пароль_почтового_ящика_куда_будет_отправляться_письмо';
IdMessage1.Subject:='тема письма';
IdMessage1.Body.Text:='текст тела письма';
IdMessage1.From.Address:='от кого отправляем: [email=qwerty@yandex.ru]qwerty@yandex.ru[/email]';
IdMessage1.From.Name:='имя отправителя';
IdMessage1.Recipients.EMailAddresses:='кому отправляем: [email=delphi@yandex.ru]delphi@yandex.ru[/email]';
Att:=TIdAttachment.Create(IdMessage1.MessageParts,'путь до файла(например: C:\FileName.exe)'); // вложение в письмо
IdSMTP1.Connect(); // подключаемся
if IdSMTP1.Connected=true then
begin
IdSMTP1.Send(IdMessage1); // если подключились, то отправляем письмо и отключаемся.
IdSMTP1.Disconnect;
end;
end;
end. Этот сорц я находил, но всетаки хотелось написать "попроще", да и было просто интересно как с помощью этого компонента реализовать. В общем нашел решение. Сначала я файл пихал в TMemoryStream пытаясь передавать пост запросом, но естественно ничего не выходило. в uses добавляем - IdMultiPartFormData, IdHTTP сам код:
function ...
var
MD: IdMultiPartFormDataStream;
HTTP: TIdHTTP;
begin
MD:=TIdMultiPartFormDataStream.Create;
HTTP:=TIdHTTP.Create(self);
MD.AddFile('myfile','C:\shit.jpg','image'); //Название файла в PHP скрипте, путь к файлу, тип файла
HTTP.Post('http://site.ru/index.php',MD);
MD.Free;
end;
Вот как то так)
|
|
|
|
|