2010-11-09 4 views
0

Я знаю несколько способов (я знаю, что есть, вероятно, больше), чтобы открыть файл в браузере после пользователь нажимает на ссылку,Что это лучший способ, чтобы открыть файл в браузере

  • Используйте PHP заголовки для имитации загрузки файла
  • использовать < в > тэг для перенаправления пользователя на путь к файлу
  • Используйте JavaScripts window.location, чтобы указать на местоположение файла
  • Iframe тег
  • Объектная метка

Что представляет собой самый эффективный кросс-браузер или самый лучший способ открыть файл в браузере? Или, что большинство компаний используют?

+2

Альтернативно вы можете открыть файл в теге iframe или теге объекта. Это субъективный вопрос ... – zzzzBov

+0

Я мог бы спросить его на одном из других форумов .... Возможно, веб-мастера? – Metropolis

ответ

1

Ну лично лучший способ создать скрипт download.php, а затем отправить файл хэшей, что, Представьте, что вы имели макет каталога следующим образом:

/downloads/ 
    /2010/ 
     /abc8755ghc7659c75678bf78968.file 
     /abc8755ghc7659c73278ef78998.file 
     /abc8755ghc7659c75678bf78968.file 
    /2009/ 
     /abc8755ghc7659c75678bf78968.file 
     /abc8755ghc7659c75678bf78968.file 

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

Сохранение файлов без расширения в порядке, до тех пор, пока при загрузке файла вы можете получить всю информацию и сохранить ее в своей базе данных, чтобы при отправке файла у нас есть Content-Type, Extension, Исходное имя файла и т. Д., Поэтому мы можем правильно отправить

Причина хэширования заключается в том, что синтаксические анализаторы и скребки могут легко найти фактический файл на сервере, поэтому, если скребок просматривает ваш сайт, а затем видит заголовок, называемый My ebook 2010.pdf, Он не сможет скачать его с вашего сервера, например http://mydomain.com/downloads/My ebook 2010.pdf, так как файл не существует, он существует в http://mydomain.com/downloads/abc8755ghc7659c75678bf78968.file

Безопасность всегда является лучшей мера, также с помощью PHP Сможет вы для проверки фактического пользователя, прежде чем ваше приложение решает погоду файл должен быть направлен или должен б edenied

PHP Пример сценарий будет выглядеть примерно так:

include 'all.the/files/needed.phhp'; 

if(!logged_in()) 
{ 
    header('Location: /'); 
    exit; 
} 

$FileRequest = FileRequest::getInstance(); 
$User = User::getInstance(); 

if($FileRequest->isValid) 
{ 
    if($user->canDownload($FileRequest->GetDatabaseID())) 
    { 
     $FileRequest->SendFile(); 
     exit; 
    } 
} 

Таким образом, вы можете контролировать отправку отправления, вы никогда не раскрываете местоположение своего файла, а блокировки хранятся с хешем, который будет трудно найти.

1

Все три будут работать. Но, если вы хотите, чтобы предотвратить внешние домены (поисковые системы и т.д.) доступ к файлам, вы должны использовать PHP:

getfile.php?id=1 ИЛИ getfile.php?name=file.txt

и проверить HTTP_REFERER, чтобы убедиться, что запрос из домена ,

+0

Все ли они открывают файлы одинаково? Я никогда раньше не обращал на это внимания. – Metropolis

+0

Если вы используете этот метод, обязательно проверьте и убедитесь, что люди не используют/| \ |. | .. chars или вы рискуете людьми, получающими файлы, к которым у них не должно быть доступа. – superfro

+0

@Metropolis: PHP не полагается на браузер клиента - это строго серверная сторона. Если вы правильно установите заголовки, файл будет загружен. –

0

Использование <a href="file.pdf">download file</a> - это самый эффективный кросс-браузер!

Метод PHP, который вы описали, просто имитирует перенаправление, которое обеспечит то же самое!

Javascript -й наименее доступный для людей с отключенным javascript!

+0

Но роботы и пауки и маленькие детишки-сценаристы могут вымывать ваши файлы таким образом. – RobertPitt

+0

Я посмотрел на этот комментарий и забыл, что написал его, после повторного чтения вопроса я пошел на голосование по собственному комментарию :) – RobertPitt

1

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

Это также относится к файлам, которые не являются изображениями, например PDF-файлами. Вы должны открывать изображения внутри браузера. Не флэш-фильмы также сомнительны.

0

Используйте тэг для перенаправления пользователя на путь к файлу

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

0

Я бы сказал, что лучший способ - связать с файлом, используя тег <a>, устанавливающий атрибут target="_blank" таким образом, если пользовательский компьютер поддерживает открытие документа в браузере, он это сделает. Если нет, будет предложено загрузить файл.

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