使用dropzone.js上传不起作用且没有错误

时间:2015-05-18 11:07:45

标签: file-upload dropzone.js

我遇到了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

有人可以帮我解决我做错了什么以及文件不在目录中的位置吗?

2 个答案:

答案 0 :(得分:2)

乍一看,我注意到你在做什么

<input id="upload" name="upload[]" type="file" multiple/>

我不确定您为何将名称属性设置为上传[] 而不是上传

2015年5月22日更新

好的,我试着为你调试,我找到了原因。

因为您在Dropzone中将 uploadMultiple 设置为 true 。所以它发送多个文件,因此$ _FILES ['file'] ['name']是一个数组。

解决方案

有两种选择:

  1. 更新upload.php文件,循环遍历要上传的$ _FILES ['file'] ['name']数组。

  2. 只需将 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