Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2013, 10:45   #1
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию WinInet-загрузка файла на сервер

Привет. Написал вот такую функцию:
Код:
function WriteFileServer(Url,FileName: String): Boolean; stdcall;
const BufferSize=1024; //память размером 1 килобайт
var
hSesion,hurl: HInternet; //пиременые сеанса связи
Buffer: array [1..BufferSize] of Byte; //массив байтов
BufferLen: DWORD; //длина
f: file; //сам файл(любой)
sAppName: String; //имя файла
begin
Result:=false;
sAppName:=ExtractFileName(FileName); //получаем имя файла
hSesion:=InternetOpen(PChar(FileName), INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0); //открываем сесию
try
hUrl:=InternetOpenURL(HSesion,PChar(Url),nil,0,0,0);    //соеденяемся по Url
try
AssignFile(f,sAppName); //открываем файл у себя на компьютере
Rewrite(f); 
try
BlockRead(f,Buffer,BufferSize); //читаем блок в массив байтов
repeat
InternetWriteFile(hUrl,@Buffer,sizeof(Buffer),BufferLen); //загружаем до тех пор, пока буфер длины не будет равен 0
until
BufferLen=0;
finally
CloseFile(f); //финали указало на конец файла, закрываем файл
Result:=true; //всё прошло удачно
end;
finally
InternetCloseHandle(hUrl); //закрываем хендл url
end;
finally
InternetCloseHandle(hSesion); //закрываем сесию
end;
end;
Смысл в том, чтобы загрузить файл по Url. Например, пользователь дал такое url: http://www.mysite.ru/files/. Мы значит его открываем и туда грузим. Вопрос: Правильно всё ли?
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 30.05.2013, 11:30   #2
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

а проверить самому вера не позволяет?
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 30.05.2013, 11:43   #3
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от BARNEY Посмотреть сообщение
а проверить самому вера не позволяет?
у меня из dll, в которой эта функция.
Написано так:
Код:
exports DownloadFileServer;
exports ReadTextFileServer;
exports WriteFileServer;
И в проге:
Код:
function DownloadFileServer(url,filename: String): Boolean; external{1} 'DLT.dll';
    function ReadTextFileServer{2}({3}Url: String){4}: String;  external{5}'DLT.dll';
    function WriteFileServer(Url,FileName: String): Boolean; external 'DLT.dll';
{6}
Выдает такие ошибки:
1)Field definition not allowed after methods or properties
2)Function needs result type
3)';' expected but '(' found

4)'END' expected but ')' found
5)Identifier redeclared: 'external'
6)Type expected but 'END' found
Что делать, ума не приложу?
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 30.05.2013, 11:56   #4
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Всё перенес в программу, ошибок нет.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 31.05.2013, 21:55   #5
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Всё решил сам:
Код:
WriteFileServer(Url, FileName: String): Boolean;
var
hSesion,hurl: HInternet;
Buffer: array [1..1024] of Byte; //массив байтов
BufferLen: DWORD;
FileLen: Integer; //размер файла
n: integer; //кол-во полных пакетов
h: integer; //размер неполного пакета
i: integer;
f: file;
sAppName: String;
begin
Result:=false;
sAppName:=ExtractFileName(FileName);
FileLen:=GetFileSize(FileName); //узнаем размер файла
n:=FileLen div 1024; //частное от деления и есть кол-во пакетов
h:=FileLen mod 1024; //остаток от деления
hSesion:=InternetOpen(PChar(FileName), INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0); //открываем сесию
try
hUrl:=InternetOpenURL(HSesion,PChar(Url),nil,0,0,0);    //соеденяемся по Url
try
AssignFile(f,sAppName);
Reset(f);

if n>0 then
begin

for i:=1 To n Do
begin
BlockRead(f,Buffer,1024);
repeat
InternetWriteFile(hUrl,@Buffer,sizeof(Buffer),BufferLen);
until
BufferLen=0;
end; //ещё не закончили
end;

if h>0 then
begin
BlockRead(f,Buffer,h);
repeat
InternetWriteFile(hUrl,@Buffer,sizeof(Buffer),BufferLen);
until
BufferLen=0;

end;
//вот теперь готово
CloseFile(f);
Result:=true;
finally
InternetCloseHandle(hUrl);
end;
finally
InternetCloseHandle(hSesion);
end;
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка файла на сервер. victor5133 PHP 1 25.05.2013 18:55
Загрузка файла на сервер kipill Общие вопросы по Java, Java SE, Kotlin 3 04.05.2013 22:32
Загрузка файла на сервер Denwer Drek PHP 2 08.10.2010 16:19
Загрузка файла на сервер denisov JavaScript, Ajax 0 31.05.2010 19:25
Загрузка файла на сервер Pum Работа с сетью в Delphi 11 14.03.2009 08:58