【发布时间】:2014-06-02 10:43:20
【问题描述】:
我正在尝试使用dropzone.js 添加一个简单的拖放界面,以便用户将最多 10 张照片上传到我的服务器(当前为 WAMP)。我在后端使用 PHP 5.4。
在this tutorial 之后,我让系统运行得足够好,可以将可接受的文件类型上传到我根目录中的“上传”文件夹,但我不知道如何将照片上传到每个用户的唯一目录。
当用户访问我的照片上传页面时,他们已经在我的服务器上创建了一个具有唯一名称的文件夹,其路径已存储在 $_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 值超出范围 - 但很高兴解决了这个问题。
【问题讨论】:
标签: javascript php file upload dropzone.js