Скачать выбранный файл из каталога с PHP - PullRequest
2 голосов
/ 22 марта 2011

У меня написан скрипт (ниже), который правильно отображает содержимое определенного каталога и создает переключатель для каждого файла.Я хотел бы иметь возможность выбрать файл и загрузить его на свой компьютер.

Возможно ли это, изменив «действие» формы?Или есть другой сценарий или изменение, которое мне нужно внести в мой сценарий, чтобы выполнить это?

    <form name="myform" action="#" method="POST">



<?php
$dirPath = dir('./images');
$imgArray = array();
while (($file = $dirPath->read()) !== false)
{
  if ((substr($file, -3)=="gif") || (substr($file, -3)=="jpg") || (substr($file, -3)=="png"))
  {
     $imgArray[ ] = trim($file);
  }
}
$dirPath->close();
sort($imgArray);
$c = count($imgArray);
for($i=0; $i<$c; $i++)
{
    echo "<input type=\"radio\" name=\"group1\" value=\"" . $imgArray[$i] . "\">" . $imgArray[$i] . "<br />";
}
?>
</select>

<input type="submit" value="download">

Ответы [ 3 ]

1 голос
/ 22 марта 2011

Я бы поставил это в начале вашего существующего сценария:

if(isset($_POST['group1'])){
    $f=preg_replace('/(\.\.\/?)+/','',$_POST['group1']);
    if(file_exists('./images/'.$f)){
        header("Content-type: ".filetype('./images/'.$f));
        header('Content-disposition: attachment; filename="'.$f.'"');
        echo file_get_contents('./images/'.$f);
        exit;
    }
}

Это мой предпочтительный способ сделать то, на что указывал Циклон.

0 голосов
/ 22 марта 2011

Почему бы вам просто не создать кнопку загрузки для каждого файла в каталоге?Кажется, нет необходимости использовать форму для этого.

Удалите все формы HTML и измените цикл 'for' на это, и все будет в порядке:

foreach($imgArray as $filename)
{
    echo "<a href=\"./images/$filename\">Download '$filename'</a>";
    echo "<br/>";
}

(так как это используетпотому что вы также можете удалить строку, которая устанавливает $ c для подсчета ($ imgArray)).

Если вы настаиваете на использовании формы, я предлагаю вам либо:

  • отправьте форму в скрипт синтаксического анализа, который считывает, какой файл был выбран, а затем перенаправляет пользователя в этот файл, например, как предлагает Cyclone, или

  • использует JavaScript для прямой пересылки страницы ввыбранное изображение при нажатии кнопки «Отправить».

Однако оба решения неоправданно сложны для того, что вы пытаетесь достичь.

0 голосов
/ 22 марта 2011

header('Location: YOURFILEDOWNLOADURL; Content-type: application/force-download');

должно работать, не проверял.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...