Можно ли из JS передать обработанное изображение в $_FILES?

Делаю обработчик изображений с помощью canvas и возник вопрос, могу ли я обработанное изображение сразу же вернуть в массив $_FILES и уже после отправки формы работать с ним? Сейчас я сделал через временную папку в которую изначально складывается обработанное изображение, а уже после отправки формы из этой папки берутся изображения и производится дальнейшая работа с ними. Но этот вариант не нравится, т.к. нужно постоянно следить за этой папкой (очищать от тех файлов которые небыли отправлены пользователями, потенциально кто нибудь может накидать туда куча файлов).

В общем хотелось бы обойтись без временной папки, а работать через upload_tmp_dir (tmp/php/uploads). Пробовал через upload.php передать в тело input type="hidden" name="my_photo[]" value="'.$_FILES['photo']['tmp_name'].'", но после отправки формы upload_tmp_dir уже пустой.

Вот как сделано сейчас:

$(document).ready(function(){
  $('#uploadItem').change(function(){       
    $.each(this.files, function(i, file) {              
      // тут проверки
      sendResized(file);
    })
    $('#uploadItem').val('');
  });
});

function sendResized(file){
  var reader = new FileReader();
  reader.onload = function() {
    var maxWidth = 1000;
    var tempImg = new Image();
    tempImg.src = reader.result;
    tempImg.onload = function() {           
      var tempW = tempImg.width;
      var tempH = tempImg.height;
      if (tempW > tempH) {
        if (tempW > maxWidth) {
          tempH *= maxWidth / tempW;
          tempW = maxWidth;
        }
      } else {
        if (tempH > maxWidth) {
          tempW *= maxWidth / tempH;
          tempH = maxWidth;
        }
      }
      tempW = Math.round(tempW);
      tempH = Math.round(tempH);

      var canvas = document.createElement('canvas');
      canvas.width = tempW;
      canvas.height = tempH;
      var ctx = canvas.getContext("2d");
      ctx.drawImage(this, 0, 0, tempW, tempH);
      canvas.toBlob(function(blob) { 
        var data = new FormData();
        data.append('photo', blob);
        $.ajax({
          type: 'POST',
          url: 'upload.php',
          data: data,
          cache: false,
          contentType: false,
          processData: false,   
          success: function(html){
            // тут код success
          }
        });
      }, 'image/jpeg', 0.95);   
    }
  }
   reader.readAsDataURL(file);  
}

А в upload.php по простому

// сократил проверки и другие операции
move_uploaded_file($_FILES['photo']['tmp_name'], $dir.$filename.'.jpg';

Ответы (0 шт):