Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 从URL保存图像。在循环内失败,但在运行一次时不会失败_Image_Vbscript_Asp Classic - Fatal编程技术网

Image 从URL保存图像。在循环内失败,但在运行一次时不会失败

Image 从URL保存图像。在循环内失败,但在运行一次时不会失败,image,vbscript,asp-classic,Image,Vbscript,Asp Classic,此功能的工作原理是: Sub SaveImage(url, name) ' Set your settings strFileURL = url strHDLocation = "D:\Images\" & name ' Fetch the file Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP") objXMLHTTP.open "GET", strFileURL, false o

此功能的工作原理是:

Sub SaveImage(url, name)
    ' Set your settings
    strFileURL = url
    strHDLocation = "D:\Images\" & name

    ' Fetch the file
    Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")

    objXMLHTTP.open "GET", strFileURL, false
    objXMLHTTP.send()

    If objXMLHTTP.Status = 200 Then
    Set objADOStream = CreateObject("ADODB.Stream")
    objADOStream.Open
    objADOStream.Type = 1 'adTypeBinary

    objADOStream.Write objXMLHTTP.ResponseBody
    objADOStream.Position = 0 'Set the stream position to the start

    Set objFSO = Createobject("Scripting.FileSystemObject")
    If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation
    Set objFSO = Nothing

    objADOStream.SaveToFile strHDLocation
    objADOStream.Close
    Set objADOStream = Nothing
    End if

    Set objXMLHTTP = Nothing
End Sub
如果我调用它一次,它就会下载图像,如果我把它放在一个循环中,它就会失败,并出现不同的错误。 我在一个页面中设置这个函数,设置URL和图像名称,然后下载图像。 我对每个人都有许可。没有权限问题。 如果我将其放在一个单独的页面中,则从请求中获取URL和图像名称,如下所示:

Dim url, name
url = Request("url")
name = Request("name")
然后调用函数:

Call SaveImage(url, name)
我得到:

ADODB.Stream error '800a0bbc' Write to file failed. 它下载图像

但是如果从同一个地方,我从循环中调用sub,如下所示: 上面声明了变量。数组已填充

For row = 0 To UBound(myArray, 2)
    url = CStr(ar(1, row)) : image = id & ".jpg"
    Call SaveImage2(url, image)
Next
它在第一个图像中失败

ADODB.Stream error '800a0bbc' Write to file failed.
我尝试了其他流编写器,但其他流编写器的行为相同,但错误不同。

我在这里猜测,但请尝试objADOStream.SaveToFile strHDLocation, adSaveCreateOverWrite@John还应使用Const adSaveCreateOverWrite=2,因为枚举常量在默认情况下不存在,需要在VBScript中使用之前定义。您是从查询字符串还是表单获取url和名称?因为如果它来自查询字符串,编码可能是您的问题。我从csv文件加载了它,然后循环遍历它。我想是的。我已经把URL的文本发布到页面上,然后从页面复制到一个函数中,一次就成功了。我很生气,所以我放弃了ASP,用.NET来解决问题。从技术上讲,我现在没有问题。谢谢。@JosefZ不需要显式定义它们,它们存在于DLL中,毕竟您只需要告诉Classic ASP查找它们。看见 ADODB.Stream error '800a0bbc' Write to file failed.