Вверх ↑
Этот топик читают: Гость
Ответов: 109
Рейтинг: 0
#1: 2022-08-05 10:42:25 ЛС | профиль | цитата
Добрый день всем. Помогите пожалуйста решить такую проблему.
Мне нужно скачивать с сервера файл и проверять его дату создания. Если файлу больше 24 часов то будет сообщение появляться на экране. И нужно сделать это процесс автоматическим, по таймеру.
Столкнулся с проблемой прямо на старте. Как мне скачать файл на компьютер? Чтобы я вот нажал кнопку Старт и файл сам закачался и сохранился в папку с программой, без появления всяких диалогов сохранения. В тихом режиме так сказать.
карма: 1

0
vip
#1.1контекстная реклама от партнеров
Ответов: 284
Рейтинг: 23
#2: 2022-08-05 11:41:31 ЛС | профиль | цитата
Serascer писал(а):
Помогите пожалуйста решить


Вот компонент https://forum.hiasm.com/topic/62708

Внутри есть схемы-примеры на основе их можно сделать.

Add(MainForm,2953706,21,105)
{
Width=457
Height=455
Caption="HTTPClient - Сохранение в файл"
Position=1
}
Add(Button,12479344,168,126)
{
Left=10
Top=120
Width=140
Height=25
Caption="Выполнить"
link(onClick,11610816:doStart,[])
}
Add(Memo,2568247,819,140)
{
Left=10
Top=200
Width=425
Height=215
ScrollBars=3
}
Add(Message,363691,462,161)
{
Caption="Ошибка запроса"
Icon=1
}
Add(DoData,7347341,686,140)
{
link(onEventData,2568247:doAdd,[])
link(Data,2427935:getVar,[])
}
Add(Hub,5102370,273,126)
{
link(onEvent1,8936422:doWork,[])
link(onEvent2,6023390:doLoadFile,[(366,139)(366,153)])
}
Add(LineBreakEx,8936422,308,126)
{
Caption="clear"
}
Add(LineBreakEx,2111794,749,147)
{
Caption="clear"
Type=1
link(OnEvent,2568247:doClear,[])
}
Add(LineBreakEx,2427935,686,112)
{
Caption="head"
Type=2
}
Add(LineBreakEx,15402714,399,189)
{
Caption="head"
Type=3
link(_Data,6023390:RawHeaders,[])
}
Add(Edit,4213360,385,28)
{
Left=10
Top=25
Width=425
Text="https://img4.goodfon.ru/original/6254x2503/4/e4/guardians-of-the-galaxy-art-marvel-comics-star-lord-gamora-d.jpg"
}
Add(HTTPClient,6023390,385,140)
{
ResumeDL=1
Point(RawHeaders)
Point(doResumeDL)
link(URL,4213360:Text,[])
link(FileName,12595752:Text,[])
link(onHeadersAvail,10070054:doSynchronize,[])
link(onDownloadProgress,13932024:doSynchronize,[(548,160)(548,293)])
link(onError,363691:doMessage,[])
}
Add(Label,10388595,21,154)
{
Left=10
Top=5
Width=156
Height=17
Caption="Адрес файла для скачивания:"
}
Add(Label,5959088,21,203)
{
Left=10
Top=60
Width=148
Height=17
Caption="Имя файла, куда сохранить:"
}
Add(Edit,12595752,392,70)
{
Left=10
Top=80
Width=425
Text="Image.jpg"
}
Add(Label,6924240,791,329)
{
Left=365
Top=175
Width=10
Height=17
Caption="0"
}
Add(Button,15458492,280,154)
{
Left=350
Top=120
Width=80
Height=25
Caption="Прервать"
link(onClick,6023390:doAbort,[])
}
Add(ProgressBar,3247869,791,287)
{
Left=10
Top=175
Width=350
ProgressColor=16711680
Point(doMax)
}
Add(Hub,4845090,735,287)
{
link(onEvent1,3247869:doPosition,[])
link(onEvent2,6924240:doText,[(763,300)(763,335)])
}
Add(LineBreakEx,16033729,392,210)
{
Caption="len"
Type=3
link(_Data,6023390:ContentLength,[])
}
Add(LineBreakEx,10269870,693,196)
{
Caption="len"
Type=2
}
Add(Thread,11610816,224,126)
{
FastStop=0
link(onExec,5102370:doEvent1,[])
}
Add(DoData,4089202,693,224)
{
link(onEventData,3247869:doMax,[(776,230)(776,300)])
link(Data,10269870:getVar,[])
}
Add(Hub,1612285,637,140)
{
link(onEvent1,7347341:doData,[])
link(onEvent2,4089202:doData,[(672,153)(672,230)])
}
Add(Synchronize,10070054,567,140)
{
link(onSync,1612285:doEvent1,[])
}
Add(Synchronize,13932024,574,287)
{
link(onSync,4845090:doEvent1,[])
}
Add(CheckBox,2898114,329,161)
{
Left=160
Top=125
Width=80
Checked=0
Caption="Докачать"
link(onCheck,6023390:doResumeDL,[])
}


Если стандартным HTTP_Get

Add(MainForm,91136,77,70)
{
Left=312
Top=284
Width=358
Height=136
Caption="Пример HTTP_Get"
Position=1
}
Add(Label,64310,406,126)
{
Left=100
Top=40
Width=35
Font=[Arial,8,0,0,1]
Caption="Status"
}
Add(Label,21437,406,189)
{
Left=140
Top=40
Width=100
Font=[Arial,8,0,0,1]
Caption="0Kb/0Kb"
}
Add(Hub,59971,133,175)
{
OutCount=3
link(onEvent1,13152092:doExecute,[(165,181)(165,132)])
link(onEvent2,27891:GetURLSize,[(182,188)(182,209)])
link(onEvent3,27891:doDownload,[])
}
Add(Math,98541,287,126)
{
OpType=3
Op2=1024
ResultType=0
link(onResult,78676:doValue,[])
}
Add(FormatStr,19075,350,189)
{
Mask="%2Kb/%1Kb"
link(onFString,21437:doText,[])
link(Str1,78676:Value,[])
}
Add(Label,5398,77,126)
{
Left=5
Top=10
Width=35
Font=[Arial,8,0,0,1]
Caption="URL"
}
Add(Button,53054,77,175)
{
Left=5
Top=40
Width=75
Font=[Arial,8,0,0,1]
Caption="Download"
link(onClick,59971:doEvent1,[])
}
Add(Memory,78676,350,126)
{
}
Add(Math,45476,287,189)
{
OpType=3
Op2=1024
ResultType=0
link(onResult,19075:doString,[])
}
Add(Edit,70643,217,70)
{
Left=45
Top=5
Width=300
Height=21
Font=[Arial,8,0,0,1]
Text="http://www.hiasm.com/xf/attach/share/zlib.zip"
}
Add(Button,17110,77,231)
{
Left=260
Top=40
Width=75
Font=[Arial,8,0,0,1]
Caption="Stop"
link(onClick,27891:doStop,[(205,237)(205,202)])
}
Add(HTTP_Get,27891,217,189)
{
link(onStatus,45476:doOperation,[])
link(onDownload,9067067:doMessage,[(263,202)(263,244)])
link(onURLSize,98541:doOperation,[(275,209)(275,132)])
link(URL,70643:Text,[])
link(FileName,11384887:Var2,[])
}
Add(SDialog,13152092,175,126)
{
link(onExecute,2066818:doValue,[])
}
Add(Memory,2066818,224,126)
{
link(onData,1616597:doText,[(268,132)(268,76)])
}
Add(Message,9067067,280,238)
{
Caption="Download OK!"
link(Message,11384887:Var3,[(286,173)])
}
Add(GetDataEx,11384887,224,168)
{
link(Data,2066818:Value,[])
}
Add(Label,1616597,287,70)
{
Left=5
Top=75
Width=330
Height=30
Font=[MS Sans Serif,8,0,8388608,1]
Caption="_"
AutoSize=1
}

Редактировалось 2 раз(а), последний 2022-08-05 11:49:14
карма: 2
0
Ответов: 109
Рейтинг: 0
#3: 2022-08-05 13:08:09 ЛС | профиль | цитата
envoy_sky, спасибо большое.
Тут есть пара вопросов:
1 - время указывается с неверным часовым поясом. Это можно как-то исправить? Last-Modified: Fri, 05 Aug 2022 09:28:21 GMT У меня часовой пояс +4.
2 - мне нужно организовать сравнение времени создания файла. Есть возможность с помощью вашего компонента получить дату и время в виде чисел? Например вместо Fri, 05 Aug 2022 09:28:21 - 582022092821?
карма: 1

0
Ответов: 284
Рейтинг: 23
#4: 2022-08-05 13:18:42 ЛС | профиль | цитата
Serascer писал(а):
Есть возможность с помощью вашего компонента

Компонент не мой, NetSpirit создал его.
Скинь схему сюда, сегодня телепатические способности отключены.

Редактировалось 1 раз(а), последний 2022-08-05 13:19:14
карма: 2
0
Ответов: 109
Рейтинг: 0
#5: 2022-08-05 13:20:04 ЛС | профиль | цитата
envoy_sky писал(а):
Serascer писал(а):
Есть возможность с помощью вашего компонента

Компонент не мой, NetSpirit создал его.
Скинь схему что построил сюда, сегодня телепатические способности отключены.

Да схемы как таковой пока нету ) В принципе как делать сравнение у меня есть идея, просто думал может как-то можно ответ получить получше
карма: 1

0
Ответов: 284
Рейтинг: 23
#6: 2022-08-05 13:21:35 ЛС | профиль | цитата
Serascer писал(а):
можно ответ получить получше

Нет
карма: 2
0
Ответов: 109
Рейтинг: 0
#7: 2022-08-07 18:48:02 ЛС | профиль | цитата
Все получилось )
Add(MainForm,6062308,301,63)
{
Width=346
Height=361
Caption=""
BorderStyle=1
link(onCreate,15933355:doEvent1,[])
}
Add(DateDiff,4274886,854,595)
{
Point(Hours)
link(onCalc,2822326:doEvent1,[])
link(DateTime1,3758407:Result,[])
link(DateTime2,5203541:Result,[(867,537)(769,537)])
}
Add(Label,2828131,952,595)
{
Left=145
Top=10
Width=18
Height=36
Font=[MS Sans Serif,20,0,0,1]
Caption="0"
link(Text,1322988:Var3,[(958,583)(891,583)(891,635)])
}
Add(DateConvertor,5203541,763,448)
{
Mode=8
Format="dd dd MM yyyy HH:mm:ss"
Point(Data)
Point(Result)
link(Data,8732300:Var1,[(769,390)])
}
Add(Memory,12519540,504,182)
{
Point(Data)
link(onData,8472128:doMultiReplace,[(541,188)(541,279)])
}
Add(DateConvertor,3758407,854,448)
{
Mode=8
Format="dd dd MM yyyy HH:mm:ss"
Point(Data)
Point(Result)
link(Data,560544:Var3,[(860,425)])
}
Add(HTTPClient,15319530,476,84)
{
FileName="sitemap.xml"
ResumeDL=1
Point(RawHeaders)
Point(doResumeDL)
link(onFinish,13136470:doEvent1,[])
}
Add(BlockFind,9438125,462,182)
{
IncludeBlock=1
StartBlock="Last-Modified: "
EndBlock=" GMT"
link(onSearch,12519540:doValue,[])
link(Text,5475334:Var3,[(468,124)])
}
Add(Hub,13136470,532,91)
{
OutCount=3
link(onEvent1,9438125:doSearch,[(558,97)(558,122)(457,122)(457,188)])
link(onEvent2,7954790:doSearch,[(550,104)(550,153)])
link(onEvent3,7592200:doTimer,[(665,111)(665,601)])
}
Add(BlockFind,7954790,728,147)
{
IncludeBlock=1
StartBlock="Date: "
EndBlock=" GMT"
link(onSearch,6809043:doValue,[])
link(Text,5475334:Var2,[(734,131)(496,131)])
}
Add(GetDataEx,5475334,490,119)
{
link(Data,15319530:RawHeaders,[])
}
Add(Memory,6809043,770,147)
{
Point(Data)
link(onData,7356010:doMultiReplace,[(810,153)(810,216)])
}
Add(ListBox,8105427,826,161)
{
Left=210
Top=210
Width=95
Height=30
Visible=1
Strings=#8:Mon,~01§|8:Tue,~02§|8:Wed,~03§|8:Thu,~04§|8:Fri,~05§|8:Sat,~06§|8:Sun,~00§|9:Jan~:01:§|9:Feb~:02:§|9:Mar~:03:§|9:Apr~:04:§|9:May~:05:§|9:Jun~:06:§|9:Jul~:07:§|9:Aug~:08:§|9:Sep~:09:§|9:Oct~:10:§|9:Nov~:11:§|9:Dec~:12:§|
}
Add(MultiReplace,7356010,819,210)
{
Delimiter="~"
EndSymbol="§"
Mode=1
link(onResult,13146269:doReplace,[(863,216)(863,240)(807,240)(807,265)])
link(Text,6809043:Value,[(825,194)(776,194)])
link(ReplaceList,8105427:Text,[])
}
Add(ListBox,11892892,553,224)
{
Left=210
Top=250
Width=95
Height=30
Visible=1
Strings=#8:Mon,~01§|8:Tue,~02§|8:Wed,~03§|8:Thu,~04§|8:Fri,~05§|8:Sat,~06§|8:Sun,~00§|9:Jan~:01:§|9:Feb~:02:§|9:Mar~:03:§|9:Apr~:04:§|9:May~:05:§|9:Jun~:06:§|9:Jul~:07:§|9:Aug~:08:§|9:Sep~:09:§|9:Oct~:10:§|9:Nov~:11:§|9:Dec~:12:§|
}
Add(MultiReplace,8472128,546,273)
{
Delimiter="~"
EndSymbol="§"
Mode=1
link(onResult,6484580:doReplace,[(590,279)(590,303)(534,303)(534,328)])
link(Text,12519540:Value,[(552,243)(510,243)])
link(ReplaceList,11892892:Text,[])
}
Add(Memo,3873322,721,490)
{
Left=10
Top=100
Width=140
Height=100
link(Str,560544:Var2,[(727,460)(720,460)])
}
Add(Replace,13146269,819,259)
{
SubStr=" :"
DestStr=" "
link(onReplace,6614014:doValue,[])
link(Str,7356010:Result,[])
}
Add(Replace,10593762,861,308)
{
SubStr=": "
DestStr=" "
link(onReplace,14970206:doValue,[])
link(Str,6614014:Value,[])
}
Add(Memory,6614014,861,259)
{
Point(Data)
link(onData,10593762:doReplace,[(905,265)(905,289)(849,289)(849,314)])
}
Add(Memory,14970206,903,308)
{
Point(Data)
link(onData,12789203:doEvent1,[(951,314)(951,391)])
}
Add(Replace,6484580,546,322)
{
SubStr=" :"
DestStr=" "
link(onReplace,5645014:doValue,[])
link(Str,8472128:Result,[])
}
Add(Replace,725558,588,371)
{
SubStr=": "
DestStr=" "
link(onReplace,8502662:doValue,[])
link(Str,5645014:Value,[])
}
Add(Memory,5645014,588,322)
{
Point(Data)
link(onData,725558:doReplace,[(632,328)(632,352)(576,352)(576,377)])
}
Add(Memory,8502662,630,371)
{
Point(Data)
link(onData,10088036:doEvent1,[(678,377)(678,328)])
}
Add(GetDataEx,560544,714,420)
{
Angle=3
link(Data,8502662:Value,[(636,425)])
}
Add(Hub,10088036,693,322)
{
link(onEvent1,3758407:doConvert,[(781,328)(781,454)])
link(onEvent2,3873322:doAdd,[(711,335)(711,496)])
}
Add(Memo,3632,973,476)
{
Left=180
Top=100
Width=140
Height=100
link(Str,8732300:Var2,[(979,437)(895,437)])
}
Add(GetDataEx,8732300,889,385)
{
Angle=1
link(Data,14970206:Value,[(909,390)])
}
Add(Hub,12789203,966,385)
{
link(onEvent1,3632:doAdd,[(992,391)(992,437)(962,437)(962,482)])
link(onEvent2,5203541:doConvert,[(992,398)(992,426)(751,426)(751,454)])
}
Add(Timer,7592200,784,595)
{
Interval=5000
Enable=1
AutoStop=1
link(onTimer,4274886:doCalc,[])
}
Add(Label,12131401,672,490)
{
Left=10
Top=70
Width=151
Height=17
Caption="Дата-время создания файла"
}
Add(Label,9773500,1022,476)
{
Left=180
Top=70
Width=110
Height=17
Caption="Дата-время сервера"
}
Add(Label,11458222,952,546)
{
Left=10
Top=20
Width=120
Height=17
Caption="Часов после создания"
}
Add(Memo,2568247,889,819)
{
Left=10
Top=240
Width=180
Height=70
ScrollBars=3
link(Str,1877038:FormatTime,[])
}
Add(Time,1877038,889,770)
{
}
Add(If_else,5705247,875,686)
{
Type=2
Op1=String(0)
Op2=String(24)
link(onTrue,2568247:doAdd,[(919,692)(919,758)(877,758)(877,825)])
link(Op1,1322988:Var2,[(881,664)(874,664)])
}
Add(GetDataEx,1322988,868,630)
{
Angle=3
link(Data,4274886:Hours,[(860,635)])
}
Add(Hub,2822326,910,595)
{
link(onEvent1,2828131:doText,[])
link(onEvent2,5705247:doCompare,[(936,608)(936,650)(863,650)(863,692)])
}
Add(Label,10383757,833,770)
{
Left=10
Top=210
Width=71
Height=17
Caption="Дата ошибки"
}
Add(Timer,6936113,385,119)
{
Interval=3600000
Enable=1
link(onTimer,16661090:doEvent1,[(425,125)(425,97)])
}
Add(Hub,15933355,357,77)
{
link(onEvent1,16661090:doEvent2,[(403,83)(403,104)])
link(onEvent2,6936113:doTimer,[(378,90)(378,125)])
}
Add(Hub,16661090,434,91)
{
InCount=2
link(onEvent1,15319530:doLoadFile,[])
}


Редактировалось 3 раз(а), последний 2022-08-07 19:25:08
карма: 1

0
Ответов: 685
Рейтинг: 142
#8: 2022-08-07 20:54:08 ЛС | профиль | цитата
Serascer,

Add(MainForm,2953706,266,154)
{
Width=304
Height=189
link(onCreate,14610779:doDownload,[])
}
Add(DateDiff,6249982,441,189)
{
Point(Days)
Point(Hours)
Point(Minuts)
Point(Seconds)
link(onCalc,11482456:doString,[(480,195)(480,237)(431,237)(431,258)])
link(DateTime1,2635946:DateTime,[])
link(DateTime2,8134004:DateCreateReal,[(454,180)(433,180)(433,229)(405,229)])
}
Add(Time,2635946,434,126)
{
Time_Date=1
Point(DateTime)
}
Add(HTTP_Get,14610779,322,168)
{
URL="https://forum.hiasm.com/getfile/39471"
FileName="Тетрис.zip"
link(onStop,8134004:doRead,[])
}
Add(FileAttributes,8134004,378,189)
{
FileName="Тетрис.zip"
Point(DateCreateReal)
link(onRead,6249982:doCalc,[])
}
Add(FormatStr,11482456,441,252)
{
DataCount=4
Mask="Прошло:\r\n дней - %1\r\n часов - %2\r\n минут - %3\r\n секунд - %4 "
link(onFString,15549166:doText,[])
link(Str1,6249982:Days,[])
link(Str2,6249982:Hours,[])
link(Str3,6249982:Minuts,[])
link(Str4,6249982:Seconds,[])
}
Add(Memo,15549166,518,231)
{
Left=550
Top=160
Align=5
ScrollBars=3
}

карма: 15

0
Ответов: 109
Рейтинг: 0
#9: 2022-08-07 22:03:55 ЛС | профиль | цитата
Gunta, боюсь ваша схема работает не верно ) с ссылкой на нужный файл показывает что прошло 4 часа, но в реальности уже 12 )
Вообще спасибо за помощь, но в моем случае лучше брать время из ответа от сервера, чем из атрибутов файла. Админ сделал такое тех. задание.

Редактировалось 1 раз(а), последний 2022-08-07 22:19:51
карма: 1

0
Ответов: 685
Рейтинг: 142
#10: 2022-08-09 10:52:01 ЛС | профиль | цитата
Serascer, Не все сервера в заголовке ответа имеют дату и время последнего изменения файла.
"HTTP/1.1 200 OK
Cache-Control: must-revalidate
Connection: keep-alive
Date: Tue, 09 Aug 2022 07:42:31 GMT
Pragma: public
Content-Length: 1172
Content-Type: application/octet-stream
Expires: 0
Server: nginx/1.19.2
Set-Cookie: PHPSESSIDД0f546bc8fc588202d562010a081d34; path=/; domain=.hiasm.com
X-Powered-By: PHP/7.4.9
Content-Disposition: attachment; filename=Просмотр jpg pdf.zip
Content-Description: File Transfer
Content-Transfer-Encoding: binary
Strict-Transport-Security: max-age`4800

"
В таких случаях можно проверять файл по его размеру и если он изменился скачать его.

Add(MainForm,2953706,189,112)
{
link(onCreate,9366026:doEvent1,[])
}
Add(HTTP_Get,14665720,371,112)
{
URL="https://forum.hiasm.com/getfile/39504"
FileName="Просмотр jpg pdf.zip"
link(onURLSize,12331889:doValue,[])
}
Add(Timer,5408034,273,140)
{
Interval=10000
Enable=1
link(onTimer,1031320:doEvent2,[(312,146)(312,139)])
}
Add(Hub,9366026,238,126)
{
link(onEvent1,1031320:doEvent1,[])
link(onEvent2,5408034:doTimer,[(263,139)(263,146)])
}
Add(Hub,1031320,329,126)
{
InCount=2
OutCount=1
link(onEvent1,14665720:GetURLSize,[])
}
Add(MemFIFO,12331889,434,126)
{
link(onData,14041109:doCompare,[(473,132)(473,167)(424,167)(424,188)])
}
Add(If_else,14041109,434,182)
{
Type=5
link(onTrue,14665720:doDownload,[(480,188)(480,104)(361,104)(361,118)])
link(Op1,12331889:Value1,[])
link(Op2,12331889:Value2,[])
}

Или скачивать файл и считать его контрольную сумму и если она разная сообщать об изменении файла.
карма: 15

0
Ответов: 4621
Рейтинг: 746
#11: 2022-08-13 10:25:04 ЛС | профиль | цитата
---

Редактировалось 1 раз(а), последний 2022-08-13 11:47:22
карма: 26

0
Ответов: 4621
Рейтинг: 746
#12: 2022-08-13 11:46:46 ЛС | профиль | цитата
Serascer писал(а):
время указывается с неверным часовым поясом
Оно указывается по Гринвичу. Для получения локального - нужно к серверному прибавлять смещение часового пояса в своей системе.
Serascer писал(а):
Есть возможность с помощью вашего компонента получить дату и время в виде чисел?
Нет - нужно вручную разбирать формат. Сделал схему для преобразования времени.

Serascer писал(а):
но в моем случае лучше брать время из ответа от сервера, чем из атрибутов файла
Других вариантов нет: при сохранении файла он получает текущую дату. Какая у него была изначальная можно узнать только если её сообщит сервер (и сообщит правильно).

Gunta писал(а):
В таких случаях можно проверять файл по его размеру и если он изменился скачать его
Можно ещё пробовать заголовок If-Modified-Since https://developer.mozilla.org/ru/docs/Web/HTTP/Headers/If-Modified-Since

Редактировалось 2 раз(а), последний 2022-08-13 11:52:25
карма: 26

0
файлы: 1HTTP time conv.zip [2KB] [243]
12
Сообщение
...
Прикрепленные файлы
(файлы не залиты)