Ms access 将png下载到磁盘会创建损坏的文件

Ms access 将png下载到磁盘会创建损坏的文件,ms-access,url,ms-access-2016,Ms Access,Url,Ms Access 2016,在我的项目中,我想从url下载一个png文件并将其保存到磁盘 我有一个指向图像的url,我可以毫无问题地将其加载到我的web浏览器中。 但当我使用Access下载并保存这个文件时,它会保存“a”文件,但它似乎没有任何图像。它创建的每个文件都是167kb,我无法用我的图形查看器(例如XnViewMP)查看它们 当我用PE Studio加载创建的文件时,它说MZ签名丢失了(我不确定这是否意味着什么) 我在本地Web服务器上也尝试过使用.ico文件,但也遇到了同样的问题 下面是我用来下载图像文件的代码

在我的项目中,我想从url下载一个png文件并将其保存到磁盘

我有一个指向图像的url,我可以毫无问题地将其加载到我的web浏览器中。 但当我使用Access下载并保存这个文件时,它会保存“a”文件,但它似乎没有任何图像。它创建的每个文件都是167kb,我无法用我的图形查看器(例如XnViewMP)查看它们

当我用PE Studio加载创建的文件时,它说MZ签名丢失了(我不确定这是否意味着什么)

我在本地Web服务器上也尝试过使用.ico文件,但也遇到了同样的问题

下面是我用来下载图像文件的代码

Public Function DownloadFile(whaturl As String, whatdestination As String) As Boolean

    Dim newfilepath
    Dim success As Boolean

    Dim WinHttpReq: Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
    WinHttpReq.Open "GET", whaturl, False
    WinHttpReq.Send

     If WinHttpReq.Status = 200 Then
        Dim oStream: Set oStream = CreateObject("ADODB.Stream")
        oStream.type = 1    '1 is binary
        oStream.Open
        oStream.Write WinHttpReq.ResponseBody

        oStream.SaveToFile whatdestination, 2 ' 1 = no overwrite, 2 = overwrite
        oStream.Close
        success = True
    Else
        success = False
    End If

    DownloadFile = success

End Function

也许有人能告诉我为什么这段代码在下载png文件时失败了?我也尝试过使用.ico文件,但遇到了同样的问题。也许有人能帮我写这段代码?

你太难了。使用如下函数:

选项比较数据库
选项显式
'API声明。
'
私有声明函数URLDownloadToFile Lib“Urlmon”别名“URLDownloadToFileA”(_
拜瓦尔·普查勒,只要_
ByVal szURL作为字符串_
ByVal文件名为字符串_
拜瓦尔:只要_
ByVal lpfnCB(如长)_
只要
'从web下载具有公共访问权限的文件或页面。
'如果成功,则返回0,否则返回错误代码。
' 
'如果参数NoOverwrite为True,则不会尝试下载
'如果存在现有的本地文件,则不会覆盖该文件。
' 
例如:
' 
'下载文件:
'Url='https://www.codeproject.com/script/Membership/ProfileImages/%7Ba82bcf77-ba9f-4ec3-bbb3-1d9ce15cae23%7D.jpg“
'FileName=“C:\Test\CodeProjectProfile.jpg”
'结果=下载文件(Url,文件名)
' 
'下载网页:
'Url='https://www.codeproject.com/Tips/1022704/Rounding-Values-Up-Down-By-Or-To-Significant-Figur?display=Print" 
'FileName=“C:\Test\CodeProject1022704.html”
'结果=下载文件(Url,文件名)
' 
'错误代码:
'-2146697210“未找到文件”。
'-2146697211“未找到域”。
无法创建“-1”本地文件
' 
' 2004-12-17. 古斯塔夫·布罗克,仙人掌数据ApS,CPH。
' 2017-05-25. 古斯塔夫·布罗克,仙人掌数据ApS,CPH。增加了对本地文件的检查。
' 2017-06-05. 古斯塔夫·布罗克,仙人掌数据ApS,CPH。添加了不覆盖本地文件的选项。
' 
公共函数下载文件(\u
ByVal Url作为字符串,\u
ByVal LocalFileName作为字符串,\u
可选的ByVal NoOverwrite作为布尔值)\u
只要
Const BindFDefault的长度=0
常量ErrorNone的长度=0
常量ErrorNotFound的长度=-1
结果很长
如果NoOverwrite=True,则
'不应覆盖页面或文件。
'检查本地文件是否存在。
如果Dir(LocalFileName,vbNormal)“,则
'文件存在。不要继续。
退出功能
如果结束
如果结束
'下载文件或页面。
'返回成功或错误代码。
结果=URLDownloadToFile(0,Url&vbNullChar,LocalFileName&vbNullChar,BindFDefault,0)
如果结果=ErrorNone,则
'已检索到页或文件。
'检查本地文件是否存在。
如果Dir(LocalFileName,vbNormal)=“”,则
结果=ErrorNotFound
如果结束
如果结束
下载文件=结果
端函数
摘自我的文章:

(如果您没有帐户,请浏览链接:阅读全文)


完整的代码也在GitHub上:

这能回答你的问题吗?这篇文章中没有显示如何从url下载png的代码,也没有回答为什么我在这篇文章中的代码不能按预期工作。我需要关于我发布的代码的帮助。虽然我很感激你的想法,但不,那没用。你能告诉我为什么我的代码可能会失败吗?我的问题是关于我发布的代码以及为什么它不工作。另一个问题是关于确定目标文件夹是否存在。这不是那个问题的重复。我的问题不太像XMLHTTP(虽然我更喜欢WinHTTP,因为XMLHTTP往往非常依赖于状态),但我的问题是您正在使用的未定义版本(而不是在6.0中修复)这意味着您可能正在使用一个非常旧的版本,不支持GZIP/Deflate,这可能会导致此错误(我无法调查,因为URL不公开)。OP已经拒绝了ws在第一条评论中提供的这种方法。我尝试了这个版本,得到了同样的结果。@June7:哦,错过了。但这适用于任何可下载的文件,所以如果失败,则是由于网站出现问题造成的。实际上,结果不一样。根本不创建任何文件。函数返回-2146697212-这是什么意思?@June7:很有趣。你测试了什么网址?我现在不在办公室,但可以在下午检查。没关系,函数调用中有一个输入错误。使用代码中提供的链接,但不使用OPs。