Я пытаюсь использовать dropzone.js, чтобы добавить простой интерфейс перетаскивания для пользователя, чтобы загрузить до 10 фотографий на мой сервер (в настоящее время WAMP). Я использую PHP 5.4 на задней панели.
Следуя этому руководству, я получил систему, которая работает достаточно, чтобы загружать приемлемые типы файлов в папку «Загружает» в моем корневом каталоге, но я зациклился на том, как сделать фотографии вместо загрузки в уникальный каталог для каждого пользователя.
Когда пользователь доберется до моей страницы загрузки фотографий, они уже создали папку на моем сервере с уникальным именем, путь к которому был сохранен в $ _SESSION ['requestDirectory'].
Вот код, используемый для отображения формы Dropzone:
<form action="<?php echo BASE_URL; ?>photo_uploads.php" class="dropzone" id="photoUploadDropzone"></form> <script type="text/javascript"> Dropzone.options.photoUploadDropzone = { paramName: "file", maxFilesize: 5, // MB maxFiles: 10, addRemoveLinks: true, acceptedFiles: "image/jpeg, image/jpg, image/png, image/gif", accept: function(file, done) { done(); } }; </script>
Как вы можете видеть, он отправляет данные в файл с именем photo_uploads.php, который имеет следующий код:
if (!empty($_FILES)) { $tempFile = $_FILES['file']['tmp_name']; $targetPath = $_SESSION['requestedDirectory']; <--HERE'S THE PROBLEM LINE $targetFile = $targetPath. $_FILES['file']['name']; move_uploaded_file($tempFile,$targetFile); }
Как уже упоминалось выше, этот файл, похоже, не способен извлекать данные из переменной сеанса, но я не уверен, почему. Если я изменю эту строку, чтобы предоставить полный каталог (например, $ targetPath = 'C: // wamp / www / Shops / имя_папки';), он отлично работает, но, конечно, я не могу изменить это имя папки динамически на основе того, какой пользователь использует форму.
Итак, чтобы уточнить, я хотел бы узнать, как загрузить файл на путь, хранящийся в сеансе?
Для кого-то другого с той же проблемой в будущем, это то, что я изменил форму на:
<form action="<?php echo BASE_URL; ?>photo_uploads.php?folder=<?php echo $_SESSION['photosDir']; ?>" class="dropzone" id="photoUploadDropzone"></form>
Как предложил Ризван, передав значение $ _SESSION ['photosDir'] в переменной GET, он был доступен после опубликованной формы.
Другое изменение, которое я сделал, это photo_uploads.php, только по следующей строке:
$targetPath = $_GET['folder'];
Абсолютно не знаю, почему значение было недоступно непосредственно из Сессии в первую очередь – я никогда не слышал о том, что значения Session выходят из сферы действия, – но счастлив, что эта проблема решена.
Вы можете передать requestDirectory в виде строки запроса с атрибутом действия формы. Таким образом, он может быть доступен.