首页 > 解决方案 > 在下载之前测试 URLDownloadToFile 文件大小以识别不存在的文件

问题描述

目前我正在运行一个 excel vba 将图像从 URL 下载到计算机上的特定文件夹。vba 完美运行。

但是,由于我运行 vba 的方式,有时我发送以从 URL 下载的图像实际上并不存在。即使图像不存在,网站的 URL SEO 也会创建一个空白图像,而不是返回错误页面。

因此,当我将 URL 发送到 URLDownloadToFile 时,我想测试文件大小。如果它是一个特定的、固定的、小尺寸的……那么我会知道它是一个空白的创建图像而不是一个实际的图像,而不是尝试下载它。

我知道我可以在下载发生后运行另一个宏来测试文件大小并在下载后删除文件,但我希望我可以在下载尝试期间以某种方式修改 URLDownloadToFile 而不是解析文件后缀。

    Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
  Alias "URLDownloadToFileA" ( _
    ByVal pCaller As LongPtr, _
    ByVal szURL As String, _
    ByVal szFileName As String, _
    ByVal dwReserved As LongPtr, _
    ByVal lpfnCB As LongPtr _
  ) As Long

这是它将下载的空白创建图像的示例: https ://www.denverfoods.net/image/item/0265395?image=02

这是调用 URLDownloadToFile 的函数

Function DownloadFile(URL As String, LocalFilename As String) As Boolean
    Dim lngRetVal As Long
    lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
    If lngRetVal = 0 Then
        DownloadFile = True
    Else
        MsgBox ("Error Downloading, lngRetVal = " & lngRetVal & vbNewLine & vbNewLine & "URL = " & URL & vbNewLine & vbNewLine & "File = " & LocalFilename)
    End If
End Function

标签: excelvba

解决方案


推荐阅读