dropzone.js没有将文件移动到上传文件夹

时间:2013-12-09 16:09:45

标签: php jquery upload dropzone.js

我使用dropzone.js,upload插件和PHP。我正在尝试使用dropzone显示成功图标和打印图像预览,但它没有将我的图像上传到上传目录。我该如何解决这个问题?

HTML:

<div class="dropzone dropzone-previews" id="my-awesome-dropzone">
  <form action="<?PHP echo SITE.'/controller/'?>upload.php"></form>
  <div class="fallback">
    <input name="file" type="file" multiple />
  </div>
</div>

JS:

<script>
    $(document).ready(function(){
    Dropzone.options.myAwesomeDropzone = { // The camelized version of the ID of the form element
    // The configuration we've talked about above
    url: '<?PHP echo SITE.'/controller/'?>upload.php',
    previewsContainer: ".dropzone-previews",
    uploadMultiple: true,
    parallelUploads: 100,
    maxFiles: 100
  }

 });
</script>

PHP:

<?php
$ds          = DIRECTORY_SEPARATOR;  //1

$storeFolder = '../../uploads/news/';   //2

if (!empty($_FILES)) {

    $tempFile = $_FILES['file']['tmp_name'];          //3             

    $targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds;  //4

    $targetFile =  $targetPath. $_FILES['file']['name'];  //5

    move_uploaded_file($tempFile,$targetFile); //6

}
?> 

3 个答案:

答案 0 :(得分:7)

解决此问题需要2件不同的事情。

在我看来,您正在使用http://www.startutorial.com/articles/view/how-to-build-a-file-upload-form-using-dropzonejs-and-php开始使用dropzone。根据您的操作系统,您将需要更改您的文件权限,即使该页面上的注释线程表明它在本地工作。对于所有AMP堆栈甚至不同的堆栈版本/分发都不是这样。

<强>第一

确保正确设置上传路径的权限。某些文件夹(例如tmp psuedo文件夹)没有此问题,但用户创建的端点可能。如果您使用特定的操作系统/堆栈名称更新问题,我将使用特定步骤更新此答案必须这样做。

<强>第二

enctype= multipart/form-data属性添加到表单标记。

非常重要

关于Marc B提出的问题,我想指出本教程只是一个起点,不应该上传到任何可公开访问的环境一种验证和安全性。基本的安全性就是这样,只允许上传某些扩展(可以在服务器端完成,也在dropzone.js初始化中配置),并添加CSRF token。下面是一些推荐的dropzone选项配置设置,以至少加强客户端的验证:

var unique = "some-unique-string";
var acceptedFileTypes = "image/*"; //dropzone requires this param be a comma separated list

Dropzone.options.myAwesomeDropzone = { 

  // your other settings as listed above
  maxFiles: 10, // allowing any more than this will stress a basic php/mysql stack
  paramName: unique,
  headers: {"MyAppname-Service-Type": "Dropzone"},
  acceptedFiles: acceptedFileTypes

}

基于以上内容需要注意的一些PHP事项:

  • 您需要添加一项检查以确保自定义标头位于请求中(这只是一个更简单的安全步骤
  • 使用php添加一个检查以确保文件具有可接受的类型(无论服务器端验证如何,您都应该这样做)
  • 我建议您在使用php
  • 验证之前将所有文件名转换为小写
  • 编辑:您还需要确保将您的php $_FILES['file']更改为匹配dropzone paramName选项配置的唯一字符串。{{1} }

答案 1 :(得分:0)

我遇到了同样的问题,我对这些文件有写权限,但它确实有效!

答案 2 :(得分:0)

使用此upload.php它正在运行:

<?php
$upload_dir = 'uploads';
if (!empty($_FILES)) 
{ 
     $tempFile = $_FILES['file']['tmp_name'];//this is temporary server location

     // using DIRECTORY_SEPARATOR constant is a good practice, it makes your code portable.
     $uploadPath = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . $upload_dir . DIRECTORY_SEPARATOR;

     // Adding timestamp with image's name so that files with same name can be uploaded easily.
     $mainFile = $uploadPath.time().'-'. $_FILES['file']['name'];

     move_uploaded_file($tempFile,$mainFile);
}

?>