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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2014, 08:11   #1
Solmir741
Пользователь
 
Регистрация: 06.08.2014
Сообщений: 11
По умолчанию Как узнать информацию о скачиваемом с сервера файле

Доброго времени суток.
Столкнулся со следующей проблемой. Пользуюсь известной констркуцией:
Код:
Public Sub Save(Ссылка_на_файл As String, путь As String, наименов_файла As String)
    СсылкаНаФайл$ = Ссылка_на_файл
    ПутьДляСохранения$ = путь '
    ' скачиваем файл из интернета
   DownloadFile СсылкаНаФайл$, ПутьДляСохранения$

End Sub

Function DownloadFile(ByVal url$, ByVal LocalPath$) As Boolean
    ' Функция скачивает файл по ссылке URL$
   ' и сохраняет его под именем LocalPath$
   Dim XMLHTTP, ADOStream, FileName
    On Error Resume Next ': Сообщение ("Ошибка сохрания интернет-файлов закупки")

    Set XMLHTTP = CreateObject("Microsoft.XMLHTTP")
    XMLHTTP.Open "GET", Replace(url$, "\", "/"), "False"
    XMLHTTP.send
    If XMLHTTP.statusText = "OK" Then
        Set ADOStream = CreateObject("ADODB.Stream")
        ADOStream.Type = 1: ADOStream.Open
        ADOStream.Write XMLHTTP.responseBody

        ADOStream.SaveToFile LocalPath$, 2
        ADOStream.Close: Set ADOStream = Nothing
        DownloadFile = True
    Else
        'MsgBox "Не удаётся скачать файл " & XMLHTTP.statustext
   End If
    Set XMLHTTP = Nothing
End Function
Чтобы правильно сохранить файл данной конструкцией, необходимо знать расширение файла.
Однако при использовании ссылок, типа: ... /download/download.html?id=7706874&epz=true
расширение файла не указано. Подскажите, как можно узнать расширение файла в моей ситуации.
Solmir741 вне форума Ответить с цитированием
Старый 06.08.2014, 09:03   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Чтобы правильно сохранить файл данной конструкцией, необходимо знать расширение файла.
зачем?
вовсе необязательно
можно файл сохранить под любым именем, с любым расширением (или без него),
если дальше вы открываете файл средствами макросов

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

если картинки у вас загружаются, — пропишите JPG, - независимо от типа картинки, Windows потом сможет открыть JPG файл
EducatedFool вне форума Ответить с цитированием
Старый 06.08.2014, 11:25   #3
Solmir741
Пользователь
 
Регистрация: 06.08.2014
Сообщений: 11
По умолчанию

В том то и хитрость, что расширения могут быть разные. Т.е. это может быть документ Word, а может быть скан с расширением .tif. Если открывать файл без расширения, ОС задает вопрос при помощи чего открыть, каждый раз нужно выбирать вручную...
Solmir741 вне форума Ответить с цитированием
Старый 06.08.2014, 11:34   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Если вы берете ссылку с сайта,расширение файла присутствует на странице,его только найти надо.
Если с XML файла,аналогично
Код:
                    <document>
                     <guid>b984cbef-9ba1-4ea2-b1bd-450e152f8bca</guid>
                       <createDateTime>2013-09-06T17:02:12</createDateTime>
                       <fileName>Dogovor_postavka_C.rar</fileName>
                     <description>Типовой договор</description>
                      <url>http://zakupki.gov.ru/223/purchase/public/download/download.html?id=2611633</url>
                    </document>
.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 06.08.2014, 11:42   #5
Solmir741
Пользователь
 
Регистрация: 06.08.2014
Сообщений: 11
По умолчанию

Может я не вижу, но попробуйте найти расширение файла в HTML коде, ссылка следующая
http://zakupki.gov.ru/223/purchase/p...27999&epz=true
Требуется сохранить файл
КД о закупке ремонт подкрановых путей (2).doc

Последний раз редактировалось Solmir741; 06.08.2014 в 11:44.
Solmir741 вне форума Ответить с цитированием
Старый 06.08.2014, 12:35   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вот так будет работать:

Код:
Function DownloadFile(ByVal url$, ByVal LocalPath$) As Boolean
    ' Функция скачивает файл по ссылке URL$
    ' и сохраняет его под именем LocalPath$
    Dim XMLHTTP, ADOStream, FileName
    On Error Resume Next        ': Сообщение ("Ошибка сохрания интернет-файлов закупки")

    Set XMLHTTP = CreateObject("Microsoft.XMLHTTP")
    XMLHTTP.Open "GET", Replace(url$, "\", "/"), "False"
    XMLHTTP.send
    If XMLHTTP.statusText = "OK" Then
        source_filename$ = Split(XMLHTTP.getresponseheader("Content-Disposition"), """")(1)
        extension$ = Mid(source_filename$, InStrRev(source_filename$, ".")) ' например, .doc

        Set ADOStream = CreateObject("ADODB.Stream")
        ADOStream.Type = 1: ADOStream.Open
        ADOStream.Write XMLHTTP.responseBody

        ADOStream.SaveToFile LocalPath$ & extension$, 2
        ADOStream.Close: Set ADOStream = Nothing
        DownloadFile = True
    Else
        'MsgBox "Не удаётся скачать файл " & XMLHTTP.statustext
    End If
    Set XMLHTTP = Nothing
End Function
EducatedFool вне форума Ответить с цитированием
Старый 06.08.2014, 14:03   #7
Solmir741
Пользователь
 
Регистрация: 06.08.2014
Сообщений: 11
По умолчанию

Огромное спасибо, все работает!
Solmir741 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как распределить по таблице информацию, получаемую с сервера? vlad-55 HTML и CSS 1 01.08.2013 03:49
Как в делфи узнать информацию о ехе файле? Ice_Han Общие вопросы Delphi 1 15.03.2012 20:09
Как узнать версию сервера? Vit@L БД в Delphi 2 04.11.2011 16:54
как узнать информацию о загруженности процессора kakawkin Общие вопросы Delphi 5 03.09.2010 20:22
Как узнать информацию о PE файле Smoke Win Api 5 02.10.2007 13:10