Dropzone processQueue 没有做任何事情

Dropzone processQueue not doing anything

我正在使用 dropzone.js 将图片上传到我的 rails 应用程序,但我想先通过 cropper.js 处理它。

我已将 autoprocessQueue 设置为 false,因此可以裁剪图像,但是当我 运行 processQueue() 函数时,没有任何反应。没有错误,或任何东西。什么都没有。

dropzone 被识别并且可以在 dropzone 文件数组中看到文件,所以它在队列中,据我所知。我不确定为什么它没有发送。

单击提交按钮时会出现此问题。

var cropped = false;

  var myDropzone = new Dropzone('#cover-dropzone', {
// createImageThumbnails: true,
url: '/posts',
autoProcessQueue: false,
uploadMultiple: true,
parallelUploads: 100,
acceptedFiles: 'image/jpg',
previewsContainer: document.getElementById("dz-preview-container"),
maxFiles: 1,

  // The setting up of the dropzone
init: function() {
  var currentDropzone = this;
  
  this.on('dragover', function(file){
    console.log('dragover');
    // debugger;
  });

  // Listen to the sendingmultiple event. In this case, it's the sendingmultiple event instead
  // of the sending event because uploadMultiple is set to true.
  this.on('addedfile', function(file) {
    if (!cropped) {
      currentDropzone.removeFile(file);
      cropper(file);
    } else {
      cropped = false;
      var previewURL = URL.createObjectURL(file);
      var dzPreview = $(file.previewElement).find('img');
      dzPreview.attr("src", previewURL);
    }
   });

  this.on("sending", function() {
    console.log('sending');
  });
  this.on("sendingmultiple", function() {
    console.log('sendingmultiple');
    // Gets triggered when the form is actually being sent.
    // Hide the success button or the complete form.
  });
  this.on("successmultiple", function(files, response) {
    // Gets triggered when the files have successfully been sent.
    // Redirect user or notify of success.
  });
  this.on("errormultiple", function(files, response) {
    // Gets triggered when there was an error sending the files.
    // Maybe show form again, and notify user of error
  });
}
});


function cropper(file) {
  $('#dz-button-container').fadeOut('fast').hide('fast');
  showCropper(file);
  $cropperDiv.show('slow');
};

function showCropper(file) {

var c = 0;
var fileName = file.name;
var loadedFilePath = getSrcImageFromBlob(file);

$('#cropper-container').html('<img id="img-' + c + '" src="' + loadedFilePath + '" data-vertical-flip="false" data-horizontal-flip="false">')

var $image = null;  

var $image = $('#img-' + c);

var cropper = $image.cropper({
    autoCropArea: 1,
    aspectRatio: 24 / 7,
    movable: true,
    rotatable: true,
    scalable: true,
    viewMode: 1,
    minContainerWidth: 250,
    maxContainerWidth: 250
});

// controller buttons
$('.move-btn').on('click', function() { $image.cropper('setDragMode', 'move'); })
$('.crop-btn').on('click', function() { $image.cropper('setDragMode', 'crop'); })

// rotate buttons
$('.rotate-r').on('click', function() { $image.cropper('rotate', 45); })
$('.rotate-l').on('click', function() { $image.cropper('rotate', -45); })

// zoom buttons
$('.zoom-in').on('click', function() { $image.cropper('zoom', 0.1); })
$('.zoom-out').on('click', function() { $image.cropper('zoom', -0.1); })

// horizontal flip toggle
var hDirection = -1
$('.flip-v').on('click', function() { 
  $image.cropper('scaleX', hDirection);
  hDirection = hDirection === -1 ? 1 : -1;
})

// vertical flip toggle
var vDirection = -1
$('.flip-h').on('click', function() { 
  $image.cropper('scaleY', vDirection); 
  vDirection = vDirection === -1 ? 1 : -1;
})

// save image
$('#save-cropped-image').on('click', function(e) {
  // get cropped image data

  e.preventDefault();
  e.stopPropagation();

  console.log('i was clicked');

  $image.cropper('getCroppedCanvas', {
    width: 90,
    height: 160,
    minWidth: 256,
    minHeight: 256,
    maxWidth: 4096,
    maxHeight: 4096,
    fillColor: '#fff',
    imageSmoothingEnabled: false,
    imageSmoothingQuality: 'high'
  }).toBlob(function(blob) {
    var croppedFile = blobToFile(blob, fileName);
    croppedFile.accepted = true;
    // debugger;
    var files = myDropzone.getAcceptedFiles();
    for (var i = 0; i < files.length; i++) {
      var file = files[i];
      if (file.name === fileName) {
        myDropzone.removeFile(file);
      }
    }
    cropped = true;

    myDropzone.files.push(croppedFile);
    myDropzone.emit('addedfile', croppedFile);
    myDropzone.createThumbnail(croppedFile); //, width, height, resizeMethod, fixOrientation, callback)

    myDropzone.processQueue();
    console.log("process one didn't work")
  });
})

}

function getSrcImageFromBlob(blob) {
  var urlCreator = window.URL || window.webkitURL;
  return urlCreator.createObjectURL(blob);
};

function blobToFile(theBlob, fileName) {
  theBlob.lastModifiedDate = new Date();
  theBlob.name = fileName;
  return theBlob;
};

问题是我没有正确配置 acceptedFiles 参数,文件没有通过验证,也没有进入队列,所以当调用 processqueue 函数时,没有任何东西可以处理。

修复很简单:

acceptedFiles: '.jpg,.jpeg',