使用dropzone在一个请求中上传多个文件时遇到问题

时间:2019-03-29 10:32:01

标签: php mysql database dropzone.js dropzone

我试图在一个请求中使用dropzone插件更新用户图像数据库列,但是当我将 uploadMultiple 设置为true时,图像无法移动到文件夹或数据库。但是,当我将其设置为false时,只有最后一个图像名称移至用户图像列,但所有图像均移至文件夹。

预先感谢

这是我的代码

 Dropzone.options.mydropzone =
  {
      autoProcessQueue: false,
     addRemoveLinks: true,
      dictMaxFilesExceeded: "Maximum upload limit reached",
       dictInvalidFileType: "upload only JPG/PNG/JPEG/GIF/BMP",
    acceptedFiles: '.png,.jpg,.jpeg,.gif,.bmp',
        parallelUploads: 10,
          // uploadMultiple: true,
     init: function ()
    {
      var submitButton = document.querySelector('#letupload');
       myDropzone = this;


        submitButton.addEventListener("click", function(){
           myDropzone.processQueue();
        });


       this.on("complete", function(){
      if (this.getQueuedFiles().length == 0 && this.getUploadingFiles().length == 0) 
      {
        var _this = this;
        _this.removeAllFiles();
      }
      //console.log(this.getUploadingFiles());
    });

    },

  };

服务器端

if (!empty($_FILES)) {

  $temp_file = $_FILES['file']['tmp_name'];
  $targetDir = '../../user_images/';
  $filename = rand().$_FILES['file']['name'];
  $targetFile = $targetDir.$filename;


 if (move_uploaded_file($temp_file, $targetFile)) {

      $sql="UPDATE img SET Image='$filename' WHERE User_id = '$memberid' ";//
if(!$qsql=mysqli_query($con,$sql))
{
  echo mysqli_error($con);
}

  } 


}

遵循Mohammed之后,将每个图像链接到目标文件夹,但只有最后一个图像保存到该数据库中这是我的新服务器端代码

if (!empty($_FILES)) {


foreach($_FILES['file']['tmp_name'] as $key => $value) {
        $temp_file = $_FILES['file']['tmp_name'][$key];
        $targetDir = '../../user_images/';
        $filename = rand().$_FILES['file']['name'][$key];
        $targetFile =  $targetDir.$filename;

        if (move_uploaded_file($temp_file,$targetFile)) {
         $sql="UPDATE img SET Image='$filename' WHERE User_id = '$memberid' ";//
        if(!$qsql=mysqli_query($con,$sql))
        {
          echo mysqli_error($con);
        }
        }
    }

}

2 个答案:

答案 0 :(得分:1)

您将在每次迭代中进行更新,因此脚本末尾的值将是最后上传的图像的名称,因此可以尝试以下代码片段来解决此问题:

  • 将上传的文件名插入一个数组(我的ID为$ images) 文件。

  • 使用implode将数组转换为以逗号分隔的spring 函数。(我使用相同的变量$ images)。

  • 使用图像名称更新行。

代码示例:

if (!empty($_FILES)) {
   $images=array[];
  foreach($_FILES['file']['tmp_name'] as $key => $value) {
      $temp_file = $_FILES['file']['tmp_name'][$key];
      $targetDir = '../../user_images/';
      $filename = rand().$_FILES['file']['name'][$key];
      $targetFile =  $targetDir.$filename;
      if (move_uploaded_file($temp_file,$targetFile)) {
         $images[]= $filename;
      }
  }
  $images = implode(',',$images);
  $sql="UPDATE img SET Image='$images' WHERE User_id = '$memberid' ";//
  if(!$qsql=mysqli_query($con,$sql)){
     echo mysqli_error($con);
  }

}

希望这对您有所帮助。

答案 1 :(得分:0)

感谢@Mohammed,在尝试代码后,仍然存在将图像名称保存到数据库的问题,现在我发现您在 foreach 中声明了空数组,因此下面是有效代码

Dropzone Js

  Dropzone.options.mydropzone =
  {

    autoProcessQueue: false,
     addRemoveLinks: true,
      dictMaxFilesExceeded: "Maximum upload limit reached",
       dictInvalidFileType: "upload only JPG/PNG/JPEG/GIF/BMP",
    acceptedFiles: '.png,.jpg,.jpeg,.gif,.bmp',
        parallelUploads: 10,
          uploadMultiple: true,
     init: function ()
    {
      var submitButton = document.querySelector('#letupload');
       myDropzone = this;


        submitButton.addEventListener("click", function(){
           myDropzone.processQueue();
        });

      this.on("complete", function(file, response){
      if (this.getQueuedFiles().length == 0 && this.getUploadingFiles().length == 0) 
      {
        var _this = this;
        _this.removeAllFiles();
      }
      console.log(this.getUploadingFiles());
    });

    },


  };

服务器端

if (!empty($_FILES)) {

$empty_img_arr=array();
foreach($_FILES['file']['tmp_name'] as $key => $value) {
      $temp_file = $_FILES['file']['tmp_name'][$key];
      $targetDir = '../../user_images/';
      $filename = rand().$_FILES['file']['name'][$key];
      $targetFile =  $targetDir.$filename;

      if (move_uploaded_file($temp_file,$targetFile)) {


       $empty_img_arr[]= $filename;

       $image = implode(',',$empty_img_arr);
    $sql="UPDATE img SET Image='$image' WHERE User_id = '$memberid' ";//
      if(!$qsql=mysqli_query($con,$sql))
      {
        echo mysqli_error($con);
      }

      }
  }

}

非常感谢