Я не могу вызвать предварительный просмотр при перетаскивании изображения в поле ввода - PullRequest
0 голосов
/ 02 июня 2018

У меня есть окно для загрузки изображений в Cloudinary, которое работает нормально, но я не могу вызвать функцию предварительного просмотра, когда изображения сбрасываются.

Это HTML-код:

<div class="card text-muted">
    <label id="upload" for="dropboxInput" class="card-block text-muted">
       <input type="file" name="file" data-url="CLOUDINARY_URL"
              data-form-data="{CLOUDINARY STUFF}" 
              data-cloudinary-field="file" class="cloudinary-fileupload"
              multiple="multiple" style="display:none" id="dropboxInput">
  </label>                        
</div>

Это код для запуска функции, которая отлично работает при выборе изображений после щелчка в выпадающем списке:

var dropboxInput = document.getElementById("dropboxInput");
dropboxInput.onchange = function(){readURL(this)};

Я пробовал это, но, похоже, не получает dropboxInput.value.Загруженные изображения загружаются:

var dropbox = document.getElementById("dropbox");
dropbox.ondrop = function(){
    readURL(dropboxInput);
};

Это функция предварительного просмотра, которая обрабатывает предварительный просмотр:

function readURL(input){
   if(input.files){

       for (i = 0; i < input.files.length; i++) {
           var reader = new FileReader();

           reader.onload = function(event) {
                 $($.parseHTML('<img>')).attr('src', event.target.result).appendTo(preview);
           }
        reader.readAsDataURL(input.files[i]);
        }
   }    
}

В поле ввода CLOUDINARY STUFF это:

<input type="file" name="file" data-url="https://api.cloudinary.com/v1_1/MYACCOUNT/auto/upload" 
data-form-data="{&quot;eager&quot;:&quot;c_limit,h_768,w_1024&quot;,&quot;signature&quot;:&quot;1f5c7426f428ebd02bb45180767fd920716cc59e&quot;,&quot;api_key&quot;:&quot;185516472314647&quot;,&quot;eager_async&quot;:true,&quot;callback&quot;:&quot;/cloudinary_cors.html&quot;,&quot;tags&quot;:&quot;Punta de Vistalegre,2&quot;,&quot;use_filename&quot;:true,&quot;timestamp&quot;:&quot;1527959323&quot;}" 
data-cloudinary-field="file" class="cloudinary-fileupload"
multiple="multiple" style="display:none" id="dropboxInput">

Когда изображения сбрасываются, я не нахожу способ передать их в функцию readURL ().

Заранее благодарим за любую помощь.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Решение было в функции cloudinary-fileupload , которая имеет опцию drop , которая обрабатывает удаленные файлы.Поле ввода генерируется программно с помощью этого Java-кода:

 String html = cloudinary.uploader().imageUploadTag("file", options, htmlOptions);

И это реализация опции удаления:

$(".cloudinary-fileupload").cloudinary_fileupload({
   ...
   drop: function(e, data){

         readURL(data);

   },
   ...
0 голосов
/ 02 июня 2018

Когда вы делаете

dropbox.ondrop = function(){
  readURL(dropboxInput.value);
};

Вместо передачи dropboxIinput.value попробуйте передать только dropboxInput, поскольку вы рассматриваете аргумент как элемент input.

Обновление 1

Я не уверен, что могу сказать, не получив больше подробностей.Но если, перетаскивая файлы внутрь element#dropbox, ваш input#dropboxInput меняется, вы можете написать свою функцию следующим образом:

function readURL(input){
  if(input.files.length){
    for (i = 0; i < input.files.length; i++) {
      image_url = window.URL.createObjectURL(input.files[i]);
      $("<img>", {
        src: image_url
      }).appendTo(preview);
    }
  }    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...