jquery ajax를 통해 base64 url을 전달하고 서버에 저장하려고합니다. 그러나 아래 코드는 빈 파일을 제공합니다. 나는 디코딩 된 문자열과 문자열로부터 createimage를 작성하려고했지만 두 변수 모두 0 비트가 기록되었습니다. 내가 작업 한 값을 테스트 할 때 [object FileReader]를 출력합니다 ...... 나는 단계가 빠져 있거나 실수를하고있는 것 같습니다.Ajax Send Base64로 인코딩 된 이미지를 서버에 저장
이미지를 $ _FILE 유형의 객체로 변환하는 방법이 있습니까? 이유는 가능한 경우 파일을 저장하기 위해 wordpress 함수를 사용하는 것과 같습니다.
PHP 코드 :
function uploadimg() {
$error = false;
//if (! function_exists('wp_handle_upload')) require_once(ABSPATH . 'wp-admin/includes/file.php');
//$upload_overrides = array('test_form' => false);
$images=array();
$a=0;
unset ($_POST['action']);
foreach($_POST as $basefile){
$upload_dir = wp_upload_dir();
$upload_path = str_replace('/', DIRECTORY_SEPARATOR, $upload_dir['path']) . DIRECTORY_SEPARATOR;
$base64_string = $basefile;
echo $basefile;
$base64_string = preg_replace('/data:image\/.*;base64,/', '', $base64_string);
$decoded_string= base64_decode($base64_string); // 0 bytes written in fwrite
$source = imagecreatefromstring($decoded_string); // 0 bytes written in fwrite
$output_file = $upload_path.'myfilef'.$a.'.jpg';
$images[]=$output_file;
$a++;
$image = fopen($output_file, 'wb');
$bytes=fwrite($image, $source);
echo $bytes;
fclose($image);
}
echo json_encode($images);
exit;
}
add_action('wp_ajax_uploadimg', 'uploadimg');
add_action('wp_ajax_nopriv_uploadimg', 'uploadimg');
jQuery를 샘플 코드 아래에 jQuery를 업데이트 올바른 방향으로 날을 가리키는위한 폴스에
jQuery(document).on('change', '.imageup', function(event){
errors= [];
errnum=0;
numberofimages=jQuery("#selectedimages > div").length; //get number of images
if(numberofimages<10){
var id= jQuery(this).attr('id');
var length= this.files.length;
if(length>1) {// if a multiple file upload
var images = new FormData();
images.append('action', 'uploadimg'); //wordpress specific
jQuery.each(event.target.files, function(key, value){
var size= value.size;
var extension= value.name.substring(value.name.lastIndexOf('.') + 1).toLowerCase();
var allowedExtensions = ['png', 'jpg', 'jpeg', 'gif'];
if(allowedExtensions.indexOf(extension) !== -1) {
if(numberofimages<10){
var file=value;
console.log(file);
var fileReader = new FileReader();
fileReader.onload = function (e) {
var img = new Image();
img.onload = function() {
var MAX_WIDTH = 100;
var MAX_HEIGHT = 100;
var width = img.width;
var height = img.height;
if (width > height) {
if (width > MAX_WIDTH) {
height *= MAX_WIDTH/width;
width = MAX_WIDTH;
}
} else {
if (height > MAX_HEIGHT) {
width *= MAX_HEIGHT/height;
height = MAX_HEIGHT;
}
}
var canvas = document.createElement("canvas");
canvas.width = width;
canvas.height = height;
canvas.getContext("2d").drawImage(this, 0, 0, width, height);
this.src = canvas.toDataURL('image/png');
} // end on load function
img.src = e.target.result;
} //end filereader function
fileReader.readAsDataURL(file);
console.log(fileReader);
images.append(key, fileReader);
numberofimages++;
} else {
errnum++;
errors[errnum]= value=' is a illegal file type';
}
}
});
//image holder finished, remove
jQuery('#'+id).remove();
jQuery.ajax({
url: '/wp-admin/admin-ajax.php',
type: 'POST',
data: images,
cache: false,
processData: false,
contentType: false,
success: function(data) {
console.log(data);
}//end of success function
});
'readAsDataURL'가 성공적으로 완료되면, _load_ 이벤트는 fileReader''에 발사되며, readAsDataURL''의 결과는 _result_ 속성에있을 것입니다, 비동기입니다. 자세한 내용은 [MDN ** ** _FileReader_] (https://developer.mozilla.org/en-US/docs/Web/API/FileReader)를 참조하십시오. –
onload가 올바른 jquery 코드에 포함되어 있습니다 ..... 위와 같이 .....보다 업데이트되었습니다. – David
루프 완료 후 보내기 전에 _onload_을 (를) 기다리는 모습을 볼 수 없습니다. –