Загрузка файла через shdocvw.dll с пользовательскими заголовками - PullRequest
0 голосов
/ 27 июня 2019

Мне нужно загрузить действительно большой файл в msaccess через приложение vba.

Использование объектов MSXML2.ServerXMLHTTP.6.0 и WinHttp.WinHttpRequest.5.1 приводит к ошибке, указывающей, что недостаточно места для хранениязавершить эту операцию.Поэтому я прибегнул к использованию метода DoFileDownload из shdocvw.dll.То, что я хочу сделать, это передать дополнительный заголовок (ключ API) на запрос, отправленный функцией.

Вот примерно то, что я хочу сделать.

Private Declare Function DoFileDownload Lib "shdocvw.dll" _
  (ByVal lpszFile As String) As Long


Public Sub Download()
    sDownloadFile = StrConv(<link_to_download>, vbUnicode)
    'set a header before calling DoFileDownload
    Call DoFileDownload(sDownloadFile)
End Sub

Как мнеподойти к этой проблеме?

1 Ответ

0 голосов
/ 02 июля 2019

WebRequest, загружающий сразу весь файл, сохраняет все данные в ответ.

Несмотря на то, что есть варианты ответа чанка, использование Wget - это меньше кодирования, но больше возможностей.

Private Sub DownloadFileWget()
Const PathToWget As String = "" 'if wget is not in path use  "Path\To\Wget"
Dim LinkToFile As String
Dim SavePath As String

With CreateObject("WScript.Shell")
    LinkToFile = "http://download.windowsupdate.com/microsoftupdate/v6/wsusscan/wsusscn2.cab" 'huge file > 500MB
    SavePath = "C:\doc" 'folder to save download
    .CurrentDirectory = SavePath
    .Run Chr(34) & PathToWget & "wget.exe" & Chr(34) & " --header='name: value' " & Chr(34) & LinkToFile & Chr(34) & " -N", 1, True
     ' -N: Continue download only if the local version is outdated.
End With
End Sub
...