Делаю обработчик изображений с помощью 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';