我正在尝试使用dropzone.js添加一个简单的拖放界面,用户可以将多达10张照片上传到我的服务器(目前为WAMP)。我在后端使用的是PHP 5.4。
根据本教程,我让系统能够将可接受的文件类型上传到根目录中的"Uploads"文件夹,但我一直在纠结如何将照片上传到每个用户的唯一目录。
当用户到达我的照片上传页面时,他们已经在我的服务器上创建了一个具有唯一名称的文件夹,其路径已存储在$_SESSION['requestedDirectory']中。
以下是用于显示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/foldername';),它可以正常工作,但当然我不能根据使用表单的用户动态更改该文件夹名。
为了澄清,我想知道如何将文件上传到Session中存储的路径?
更新:已解决
对于未来有同样问题的其他人,这就是我将表格改为的:
<form action="<?php echo BASE_URL; ?>photo_uploads.php?folder=<?php echo $_SESSION['photosDir']; ?>" class="dropzone" id="photoUploadDropzone"></form>
正如Rizwan所建议的,通过在GET变量中传递$_SESSION['photosDir']值,可以在表单发布后访问它。
我做的另一个更改是photo_uploads.php,只是改为以下行:
$targetPath = $_GET['folder'];
完全不知道为什么一开始就不能直接从Session获得该值——我从未听说过Session值超出范围——但很高兴这个问题得到了解决。
您可以将requestedDirectory作为查询字符串与表单的action属性一起传递。这样就可以访问它。