【问题标题】:Deleting renamed file on server using Dropzone.js使用 Dropzone.js 删除服务器上重命名的文件
【发布时间】:2016-09-10 09:47:31
【问题描述】:

我正在尝试实现 Dropzone JS 来帮助将文件上传到服务器。我在客户端使用 Dropzone 的通用实现,我的 html 如下所示:

  <form id='portfolioupload' action='PortfolioUpload.php' class='dropzone'>
    <div class='fallback'>
      <input name='file' type='file' />
    </div>
  </form>

在服务器中,我进行了一些检查,最后,我重命名了文件并将其移动到最终位置:

$newname = substr(GetGUID(false), -7) . '.' . $ext;
move_uploaded_file($_FILES['file']['tmp_name'], PortfolioPath() . $newname) 

按照Dropzone.js- How to delete files from server? 中的建议,我使用 json 将这些信息传回:

header_status(200); // output header, error 200
echo json_encode(array("Filename" => $newname));

那里的代码示例看起来像是将其添加到一个数组中,该数组可以传递给服务器进行删除。如此接近,但不是我想要的。

然后我偶然发现了这个问题,how to upload and delete files from dropzone.js,发现我可以收听 removedfile 事件。所以我在那里实现代码:

Dropzone.options.portfolioupload = {
  acceptedFiles: '.png, .jpg, .gif',
  addRemoveLinks: true,
  maxFiles: 25,
  maxFilesize: 500000,
  removedfile: function(file) {
    alert('Deleting ' + file.name);
    var name = file;
    $.ajax({
        type: 'POST',
        url: 'app/assets/PortfolioUpload.php',
        data: "f=delete&fn="+name,
        dataType: 'html'
    });

    var _ref;
    return (_ref = file.previewElement) != null ? _ref.parentNode.removeChild(file.previewElement) : void 0;
  }
};

请求成功发送到服务器,只是文件名是原始文件名,而不是服务器重命名的文件名。

今天淘完网后,我觉得我无法弄清楚如何将这两个项目绑在一起。例如,如果我上传了 foo.jpg 并在服务器中将其重命名为 dk03p7b.jpg,我如何告诉 Dropzone foo.jpg = dk03p7b.jpg 以便当用户单击删除文件时,它也会在服务器中被删除?

【问题讨论】:

    标签: javascript php dropzone.js


    【解决方案1】:

    我自己解决了这个问题,首先,从成功响应中获取 json 并将其保存到元素 file.previewElement.id 中,如下所示:

      success: function( file, response ) {
        obj = JSON.parse(response);
        file.previewElement.id = obj.filename;
      }
    

    然后我在 removedfile 事件中执行删除 ajax 调用时使用该值:

      removedfile: function(file) {
        var name = file.previewElement.id;
        $.ajax({
            type: 'POST',
            url: 'deletefile.php',
            data: "fn="+name,
            dataType: 'html'
        });
    
        var _ref;
        return (_ref = file.previewElement) != null ? _ref.parentNode.removeChild(file.previewElement) : void 0;
      },
    

    【讨论】:

      【解决方案2】:

      这对我也有用

       // "myAwesomeDropzone" is the camelized version of the HTML element's ID
      var myDropzone = new Dropzone("#myAwesomeDropzone", {
         /*
          * This step isn't required.
          success: function(file, response) {
              file.previewElement.id = response.id;
          }
         */
      
      });
      myDropzone.on('removedfile', function(file) {
      
          var id = jQuery(file.previewElement).find('.dz-filename span').html();
          //  directly access the removing preview element and get image name to delete it from server.
         // var id = file.previewElement.id;
          $.ajax({
              type: 'POST',
              url: '<?php echo base_url('seller/deleteImagegalleryById'); ?>',
              data: {id: id, '<?php echo $this->security->get_csrf_token_name(); ?>': '<?php echo $this->security->get_csrf_hash(); ?>'},
              dataType: 'html'
          });
          var _ref;
          return (_ref = file.previewElement) != null ? _ref.parentNode.removeChild(file.previewElement) : void 0;
      });
      

      【讨论】:

        猜你喜欢
        • 2015-02-25
        • 1970-01-01
        • 2013-07-01
        • 1970-01-01
        • 2014-01-15
        • 1970-01-01
        • 2013-04-30
        • 1970-01-01
        • 2016-05-22
        相关资源
        最近更新 更多