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