Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.24;
Скачать: CL | DM;

Вниз

Копирование файлов с HTTP ресурса   Найти похожие ветки 

 
zdm77   (2008-07-17 13:52) [0]

Добрый день.
Есть файл на http ресурсе, допустим http://www.qqq.qqq/1.txt, проверкой в браузере, все в порядке, доступ есть, предлогает сохранить...
Как средствами Delphi, если это возможно произвести копирование с http на локальный ресурс?
Спасибо.


 
Palladin ©   (2008-07-17 13:53) [1]

idhttp


 
zdm77   (2008-07-17 14:07) [2]


> Palladin ©   (17.07.08 13:53) [1]

Пока искал про idhttp наткнулся на использование-Wininet.. Как Ваше мнение как мастера, что лучше?


 
Palladin ©   (2008-07-17 14:10) [3]

в конкретно твоем случае: idhttp, другие случаи нужно рассматривать отдельно. например по поводу https, могу однозначно сказать, что лучше и проще использовать WinInet


 
zdm77   (2008-07-17 16:13) [4]


> Palladin ©  

Пишет что не  может создать путь, при попытке создания процесса... с процессами и "прогрессами" разберусь. В INDY всегда свои заморочки. Если Вам не сложно или кому-то еще приведите пожалуйста пример простого кода копирования с http.

Спасибо.


 
Поросенок Винни-Пух ©   (2008-07-17 16:18) [5]

idhttp1.get("http://www.qqq.qqq/1.txt",MyFileStream);


 
zdm77   (2008-07-17 16:30) [6]

я запутался..и не могу растормозиться..  если Вам не сложно, просто приведите пример кода полностью... я попробовал вот так
//процесс (TThread созданый)
procedure TDownLoader.Execute;
var
 http:TIdHTTP;
 str:TFileStream;
begin
 //Создим класс для закачки
 http:=TIdHTTP.Create(nil);  
 //Поток для сохранения
 str:=TFileStream.Create(ToFolder, fmCreate); //вот сдесь ошибка (что значит что нет доступа? или просто я действительно встал в ступор...просто прошу помощи, код для вызова этого процесса дальше)
 try
   //Качаем
   http.Get( url,str);
 finally
   //чистим
   http.Free;
   str.Free;
end;


//код для вызова из формы
procedure TFormCountrys.ToolButtonImportClick(Sender: TObject);
var d:TDownLoader;
begin
 //Создадим класс потока.
 //Поток для начала будет остановлен
 d:=TDownLoader.Create(true);
 //Передадим параметры потоку
 d.URL:="http://www.qqq.qqq/1.txt";
 d.ToFolder:="c:\1";
 //Поток должен удалить себя по завершению своей работы  
 d.FreeOnTerminate:=true;
 //И запустим его на закачку.
 d.Resume;
end;


 
Поросенок Винни-Пух ©   (2008-07-17 16:31) [7]

что значит что нет доступа?

доступа нет значит.


 
zdm77   (2008-07-17 16:39) [8]

дык это локальный ресурс... путь C:\1 существует и на него к нему я имею полный доступ..что-то в коде не так... приведите пожалуйста пример, без всяких потоков и прочего, с этим я разберусь потом, просто скопировать с ресурса http на локальный ресурс. Спасибо


 
Поросенок Винни-Пух ©   (2008-07-17 16:41) [9]

ну тогда у тебя все ок. доступ есть и файл скачивается.
поздравляю.


 
zdm77   (2008-07-17 16:43) [10]


> Поросенок Винни-Пух ©   (17.07.08 16:41) [9]

ну не скачивается, выдается сообщение что не может создать файл по пути "c:\1" .. да и любой другой тоже самое...


 
Поросенок Винни-Пух ©   (2008-07-17 16:44) [11]

обман зрения. доступ у тебя есть же.


 
zdm77   (2008-07-17 16:47) [12]


> Поросенок Винни-Пух ©   (17.07.08 16:44) [11]
> обман зрения. доступ у тебя есть же.

Если тебе не сложно, напиши кодик скачивания через Indy любого файла через HTTP и приведи пожалуйста и тогда все станет ясно и не будем гнать пургу..если не скачивается значит не скачивается, я пишу что отвечает ОС и среда разработки... ну чо издеваться то?


 
Поросенок Винни-Пух ©   (2008-07-17 16:47) [13]

если доступ есть, а файл не создается, то иногда помогает более сильное и резкое нажатие на button1 под которой код создания файла.

на сотый раз обычно помогает стопроцентоно.


 
Поросенок Винни-Пух ©   (2008-07-17 16:49) [14]

если не скачивается значит не скачивается

До скачивания тебе еще далеко.
Файл сначала создай.


 
Поросенок Винни-Пух ©   (2008-07-17 17:10) [15]

Только файл, а не уже существующую папку c:\1


 
Rouse_ ©   (2008-07-17 17:30) [16]

Я для таких целей обычно использую что-то наподобие вот этого кода: http://rouse.drkb.ru/network.php#proxyload


 
zdm ©   (2008-07-18 09:55) [17]

Всем большое спасибо. разобрался. создав однотипный файл скопирует.... но вот смысл мне не очень понятен, от куда я знаю что лежит на ресурсе, я просто хочу скопировать или я не догоняю...


 
Поросенок Винни-Пух ©   (2008-07-18 09:57) [18]

от куда я знаю что лежит на ресурсе

ресурс и лежит.


 
brother ©   (2008-07-18 10:02) [19]

> от куда я знаю что лежит на ресурсе,

что по твоему понятию ресурс?
в данном случае ресурс вот:
> d.URL:="http://www.qqq.qqq/1.txt";


 
zdm ©   (2008-07-18 10:03) [20]

это понятно, куда копировать вопрос ..в какой файл


 
zdm ©   (2008-07-18 10:04) [21]

т.е. если источник "http://www.qqq.qqq/1.txt"; это все норм.. а вот куда? он же не папку просит а конкретный файл, например в c:\1.txt ..


 
brother ©   (2008-07-18 10:04) [22]

к какому обращался, такое же имя и оставляй, если хочещь можещь свое придумать, например ~123.tmp )


 
Поросенок Винни-Пух ©   (2008-07-18 10:06) [23]

это понятно, куда копировать вопрос ..в какой файл

копируй в c:\какой_файл.txt


 
brother ©   (2008-07-18 10:06) [24]

> он же не папку просит а конкретный файл

правильно, он же не знает что за тип файла скачивается и ты это должен проконтролировать...


 
zdm ©   (2008-07-18 10:07) [25]

но если я говорю что копируй в c:\1.txt, то его нужно сначала создать, но это маразм какой-то я просто хочу скопировать файл http://www.qqq.qqq/1.txt с темже именем или другим в директорию c:\1 например.


 
zdm ©   (2008-07-18 10:08) [26]

жесть.. CopyFile("источник","назначение",true) тоже не знает о типе он просто КОПИРУЕТ!!!! это и нужно


 
brother ©   (2008-07-18 10:08) [27]

> d.URL:="http://www.qqq.qqq/1.txt";
> d.ToFolder:="c:\1\1.txt";

я чет не понял, так чтоли не работает?


 
brother ©   (2008-07-18 10:10) [28]

> d:TDownLoader;

он наследник чего?


 
zdm ©   (2008-07-18 10:14) [29]


> brother ©   (18.07.08 10:08) [27]

работает, яже написал, но мне, что, нужно CreateFile каждый раз делать, если я просто хочу скопировать

> brother ©   (18.07.08 10:10) [28]

это поток вызывает.. работает если есть такой файл "c:\1\1.txt"; но я хочу просто с http ресурса скопировать файл в папку c:\1\ с темже что и у источника именем. Директория есть, файлов там может и не быть, точнее их там и не будет, они удаляются перед закачкой, это временная директория, а с http ресурса нужно взять новый файл, который переодически обновляется и положить по этому пути.


 
Поросенок Винни-Пух ©   (2008-07-18 10:17) [30]

Ну и в чем твоя загвоздка?


 
Dennis I. Komarov ©   (2008-07-18 10:18) [31]

> [30] Поросенок Винни-Пух ©   (18.07.08 10:17)

Подозреваю в получении имени файла :)


 
brother ©   (2008-07-18 10:18) [32]

> procedure TDownLoader.Execute;
> var
> http:TIdHTTP;
> str:TFileStream;
> begin
> //Создим класс для закачки
> http:=TIdHTTP.Create(nil);  
> //Поток для сохранения
> str:=TFileStream.Create(ToFolder, fmCreate); //вот сдесь
> ошибка (что значит что нет доступа? или просто я действительно
> встал в ступор...просто прошу помощи, код для вызова этого
> процесса дальше)
> try
>   //Качаем
>   http.Get( url,str);
> finally
>   //чистим
>   http.Free;
>   str.Free;
> end;

там и имя файла должно быть, я же тебе сказал об этом в [27], погляди выделенное внимательно...


 
Поросенок Винни-Пух ©   (2008-07-18 10:19) [33]

Эка проблема. Все ссылки у него поди литералы. Имя файла тоже пусть будет литералом.


 
zdm ©   (2008-07-18 10:20) [34]

пришел к выводу, что просто всетаки создавать на подобии
CreateFile("c:\1\1.txt"), GENERIC_READ,
                           (FILE_SHARE_READ or FILE_SHARE_WRITE), nil,
                           OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

ну а дальше все работает

может и есть где логика тут.. в принципе действительно контроль появляется.
Всем Спасибо еще раз


 
brother ©   (2008-07-18 10:20) [35]

зы, в данном случае имя файла в TFileStream. передавать это твоя забота...откуда он знает про то что летит из TIdHTTP


 
brother ©   (2008-07-18 10:24) [36]

> d.ToFolder:="c:\1";

вот назвал его не правильно и путаешься... туда имя файла с путями передавать надо



Страницы: 1 вся ветка

Текущий архив: 2008.08.24;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.028 c
15-1215459610
Артур Пирожков
2008-07-07 23:40
2008.08.24
Как обмениваться информацией между офисом и пр-ом?


2-1216559033
ДжоШуа
2008-07-20 17:03
2008.08.24
не понимаю


2-1216372635
mahab
2008-07-18 13:17
2008.08.24
proxy


15-1215086532
Sick
2008-07-03 16:02
2008.08.24
Вопрос по стэку


15-1214456828
Сергей_77
2008-06-26 09:07
2008.08.24
Посоветуйте дистрибутив Gnu/linux пожалуйста