我遇到了dropzone和upload.php文件的问题。我正在尝试保存上传到计算机上目录中的文件。我正在使用MAMP,所以目录在htdocs中。我的表单代码是:
<form action="./upload.php" class="dropzone" id="upload-form" method="post" enctype="multipart/form-data">
<div class="fallback">
<input id="upload" name="upload[]" type="file" multiple/>
</div>
<input type="submit" name="uploaden[]" id="uploaden" multiple/>
</form>
我的dropzone初始化:
Dropzone.autoDiscover = false;
$myDropzone = new Dropzone('#upload-form', {
url: "/upload.php",
uploadMultiple: true,
addRemoveLinks: true,
maxFiles: 25,
accept: function(file, done) {
console.log("uploaded");
done();
},
init: function() {
this.on("addedfile", function() {
if (this.files[25]!=null){
this.removeFile(this.files[0]);
}
});
var submitButton = document.querySelector("#uploaden")
myDropzone = this; // closure
submitButton.addEventListener("click", function() {
myDropzone.processQueue();
});
}
});
和我的新 upload.php文件:
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$ds = DIRECTORY_SEPARATOR; //1
$storeFolder = '/uploads'; //2
if (!empty($_FILES)) {
if(isset($_FILES['files']['tmp_name']) && is_array($_FILES['files']['tmp_name'])){
foreach($_FILES["files"]["tmp_name"] as $key=>$tmp_name) {
$tempFile = $_FILES['file']['tmp_name']; //3
$targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds; //4
if(!file_exists($targetPath)) {
$targetFile = $targetPath. $_FILES['file']['name']; //5
move_uploaded_file($tempFile,$targetFile); //6
}
else {
$targetFile = $targetPath. $_FILES['file']['name']; //5
move_uploaded_file($tempFile,$targetFile); //6
}
}
}
}
?>
我真的不知道我做错了什么。起初我得到了以下错误,但现在这些错误甚至都没有了......
[18-May-2015 12:12:31欧洲/阿姆斯特丹] PHP注意:第17行/Users/anoukkolkman/Desktop/School/Afstuderen/Website/htdocs/upload.php中的数组到字符串转换
[18-May-2015 12:12:31欧洲/阿姆斯特丹] PHP警告:move_uploaded_file()期望参数1为字符串,数组在/ Users / anoukkolkman / Desktop / School / Afstuderen / Website / htdocs / upload中给出第19行的.php
这些行是:
$targetFile = $targetPath. $_FILES['file']['name']; //5
move_uploaded_file($tempFile,$targetFile); //6
有人可以帮我解决我做错了什么以及文件不在目录中的位置吗?
答案 0 :(得分:2)
<input id="upload" name="upload[]" type="file" multiple/>
我不确定您为何将名称属性设置为上传[] 而不是上传。
好的,我试着为你调试,我找到了原因。
因为您在Dropzone中将 uploadMultiple 设置为 true 。所以它发送多个文件,因此$ _FILES ['file'] ['name']是一个数组。
有两种选择:
更新upload.php文件,循环遍历要上传的$ _FILES ['file'] ['name']数组。
只需将 uploadMultiple 设置为 false 即可。它应该有效。
答案 1 :(得分:0)
如果您没有在尝试上传它们的目录中看到上传的文件,我会考虑确保您对该文件夹的权限是合适的类型。由于您在本地开发,您可以将其设置为可由所有人编写。
击:
sudo chmod -R a+w /path/to/your/uploads_folder
CMD:
icacls "D:\path\to\your\uploads_folder" /grant Anouk:(OI)(CI)F /T