2016-05-24 10 views
1

Я хочу, чтобы мой пользователь загрузил файл, который генерирует мой сценарий и помещает его на свой сервер (эта часть была успешно построена). Цель состоит в том, чтобы убедиться, что пользователь имеет возможность загружать файлы на веб-сайт, который, по их утверждению, принадлежит им. Я буду проверять корень сайта, так что пример будет http://www.google.com/fileПроверьте файл на другом сервере

Затем я хочу, чтобы мой скрипт проверял, присутствует ли файл на своем сервере. Я полагал, что я мог бы использовать некоторый javascript, чтобы проверить, будет ли домен пользователя в сочетании с файловым путем возвращать любой другой HTTP-запрос, чем 404.

Итак, я посмотрел в Интернете и попробовал несколько вещей. Теперь вот результирующая функция:

/* DUMMY */ 
    url = 'http://www.google.com/'; 

    xhr = new XMLHttpRequest(); 
    xhr.open("HEAD", url,true); 
    xhr.onreadystatechange=function() { 
     alert("HTTP Status Code:"+xhr.status) 
    } 
    xhr.send(null); 

URL, который я использовал, должен существовать. Это должно привести к 200 (или что-то по существу оно существует). Однако для большинства URL-адресов я получаю ошибку 0 и следующую ошибку: заголовок «Access-Control-Allow-Origin» присутствует на запрошенном ресурсе. Происхождение 'http://localhost', следовательно, не допускается.

Может ли кто-нибудь помочь мне с моим сценарием?

+2

Вы не можете открывать URL-адреса сторонних сайтов с помощью ajax, если CORS не включен. Единственный вариант - создать скрипт php proxy, который будет читать файл и возвращать ответ. – jcubic

+0

Спасибо, на полпути к работе с вашим комментарием, чтобы создать скрипт, мне был отправлен еще один ответ, хотя ваш комментарий был очень полезен! – Hine

ответ

0

Я бы предложил использовать php, чтобы проверить то же самое. Если вам интересно о проблеме, которую вы читаете о CORS.

Это простой пример, чтобы сделать это

$file = 'http://www.domain.com/somefile.jpg'; 
$file_headers = @get_headers($file); 
if ($file_headers[0] == 'HTTP/1.1 404 Not Found') { 
    $exists = false; 
} 
else { 
    $exists = true; 
} 

Отсюда: http://www.php.net/manual/en/function.file-exists.php#75064

+1

Я бы предложил удалить символ '@' и поймать, если есть исключение. – Gogol

0

Для доступа к целевому серверу (например, google.com, где находится ваш файл) вам необходимо использовать совместное использование ресурсов для перекрестного происхождения.

Во избежание уязвимостей вы не можете выполнять JavaScript только на любом чужом сервере. Это можно сделать только на принадлежащем вам сервере, явно добавляя код в настройках конфигурации для включения запросов с вашего клиентского сервера.

0

Я хотел бы предложить (потому что это самое портативное решение) поставить прокси-скрипт на сервере. Что-то вдоль линий

<?php 
    $url = filter_var($_GET['url'], FILTER_VALIDATE_URL); 

    if ($url) { 
    $ch = curl_init($url); 
    $res = curl_exec(); 
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    echo json_encode(Array('success' => 1, 'status' => $code)); 
    } 
    else { 
    echo json_encode(Array('success' => 0, 'status' => 000000)); 
    } 

Вы можете использовать XMLHTTPRequest и JSON.parse() на стороне Javascript для анализа результата. Вы также можете использовать код, чтобы предоставить вам дополнительные данные о удаленном сервере, которые всегда могут быть полезны.

+0

На стороне клиента вам нужно будет сделать только '' 'url = 'proxy.php? Url =' + encodeURIComponent ('http://www.google.com')' '' где proxy.php содержит указанное выше код. –

Смежные вопросы