Member 13605567 Ответов: 2

База облегчил 64_decode не преобразование строки base-64 в выполнимый файл изображения


Здравствуйте ребята я успешно нашел метод который утверждает что делает входной файл файла в строку base 64 в JavaScript поэтому я успешно отправил эту строку base 64

строку JSON с помощью AJAX и в кодировке base-64 строки выглядит следующим отправлено в метод JSON с "фото":"сведения:изображение/jpeg;base64, и/9 с/4AAQSkZJRgABAQEASABIAAD/2wB и т. д...."

Поэтому, когда базовая строка 64 поступает в PHP-файл. PHP делает это волшебно и успешно хранит файл в целевой папке, где я хочу, чтобы файл был, поэтому, когда я смотрю в эту папку, там есть файл, но

когда я пытаюсь открыть фотофайл, чтобы просмотреть его, приложение для просмотра фотографий говорит что-то вроде: image.jpg похоже, что мы не поддерживаем этот формат файла, и в других приложениях для просмотра фотографий он будет что-то говорить

похоже на то, так что же я сделал не так?

Вот мой код

index.php

<style>

#photo-input{
display: block;
margin-bottom: 50px;
}

</style>

<script>

document.addEventListener('DOMContentLoaded',function(){

document.querySelector('#submit').addEventListener('click',function(){

var photo_input= document.querySelector('#photo-input').files[0];

//Convert #photo-input content into a base 64 string
var reader = new FileReader();
reader.readAsDataURL(photo_input);

reader.onload = function (){
var photo_input_result= reader.result;
sendUploadInfo(photo_input_result);
}
//

});

function sendUploadInfo(photo_input_result){

var photo= photo_input_result;

//<JSON data>

var upload_info = {
first_name: "John",
last_name: "Smith",
photo: photo
};

//</JSON data>

var upload_info_json_object= 'upload_info_json_object='+JSON.stringify(upload_info);

//<AJAX>
var xhr= new XMLHttpRequest();
xhr.onreadystatechange= function(){

if(xhr.readyState == 4){

document.querySelector('#output').innerHTML= xhr.responseText;

}
}

xhr.open('POST','x');
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(upload_info_json_object);
//</AJAX>
}

});

</script>

<input type='file' id='photo-input'>

<button id='submit'>Send JSON data</button>

<div id='output'></div>


x.php

<?php

$upload_info_json_object = json_decode($_POST['upload_info_json_object']);

$first_name= $upload_info_json_object->first_name;
$last_name= $upload_info_json_object->last_name;

//Photo upload section

$photo= $upload_info_json_object->photo;

base64_decode($photo);

$path= $_SERVER['DOCUMENT_ROOT'].'/send-json-data-by-ajax/object-based/with-file/2/images/image.jpg';

file_put_contents($path, $photo);

//

?>

<h1><?php echo $first_name.' '.$last_name.' just uploaded a photo.'; ?></h1>


Что я уже пробовал:

Поиск в Google другой сайт, и другие сайты не повезло еще за полезные ответы.

2 Ответов

Рейтинг:
2

Richard Deeming

Предполагая, что вы используете PHP 5.2.0 или более позднюю версию, это предложение от StackOverflow[^] applies - PHP поддерживает чтение содержимого data: URIs напрямую:

$photo = $upload_info_json_object->photo;
$path= $_SERVER['DOCUMENT_ROOT'].'/send-json-data-by-ajax/object-based/with-file/2/images/image.jpg';
file_put_contents($path, file_get_contents($photo));

В противном случае вам придется удалить data:image/jpeg;base64, префикс, либо на клиенте, либо на сервере.


Рейтинг:
0

MadMyche

Вы устанавливаете неправильный тип контента в javascript; всякий раз, когда они являются вложением файла, вы должны использовать contentType: 'multipart/form-data'


Member 13605567

Ваше предложение на самом деле вызвало ошибку JS.
xhr.setRequestHeader("Content-type", "multipart/form-data");
так что этого не может быть. люди это должно быть так
"фото":"сведения:изображение/jpeg;base64, и/9 с/4AAQSkZJRgABAQEASABIAAD/2wB и т. д...."
отправлено JSON

Какой-то PHP-парень сказал, что он должен быть выполнен в PHP-файле как 9j/4AAQSkZJRgABAQEASABIAAD/2wB..

не как данные:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wB и т. д. Так что я думаю, что именно поэтому я не могу просмотреть фотографию после преобразования декодирования base 64.