FileExists Возвращает Ложь - PullRequest
       50

FileExists Возвращает Ложь

0 голосов
/ 30 апреля 2020

Я создаю страницу Classi c ASP и пытаюсь определить, есть ли файл .jpg на моем веб-сервере. Если изображение существует, то я хочу использовать его, но если изображение не существует, я отображаю общее c изображение. Это всегда ложно. Есть идеи?

<%dim fs
strFilePath =("http:/example.com/photos/" & PersonID & ".jpg")
set fs=Server.CreateObject("Scripting.FileSystemObject")

  if fs.FileExists(strFilePath) then
     response.write "<img src='../photos/"& PersonID &".jpg'"&">"
 else%>
     <img src="http://exmaple.com/images/nophoto.jpg">
<%end if

set fs=nothing%>

1 Ответ

3 голосов
/ 30 апреля 2020

Scripting.FileSystemObject поддерживает доступ только к файлам из файловой системы и не может определить, существует ли файл по определенному внешнему URL-адресу. Если URL-адрес находится в текущем веб-приложении, которое вы можете использовать;

Server.MapPath(relative_path)

, который, если передан относительный путь к серверу, т.е. "/photos", вернет физический путь к файлу на сервере, который вы затем сможете проверить с fs.FileExists().

Но если URL является внешним, у вас все еще есть варианты. С помощью серверного XHR запроса к URL-адресу и на основании ответа определите его существование. Мы также можем сделать это более эффективным, только спрашивая, есть ли он там, и не возвращая контент, что мы можем сделать, используя запрос HEAD.

Вот пример возможной реализации;

<%
Function CheckFileExists(url)
  Dim xhr: Set xhr = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
  With xhr
    Call .Open("HEAD", url)
    Call .Send()
    CheckFileExists = (.Status = 200)
  End With
End Function

If CheckFileExists("https://cdn.sstatic.net/Img/unified/sprites.svg?v=fcc0ea44ba27") Then
  Call Response.Write("File Exists")
Else
  Call Response.Write("File Doesn't Exist")
End If
%>

Вывод:

File Exists

Полезные ссылки

...