Я пытаюсь сохранить изображения как BLOB в моей базе данных ORACLE 11g R2 через базу64 загруженных файлов, но когда я извлекаю этот файл из БД, он не отображает изображение с base64_encode функция. И когда я загружаю этот файл из SQL Developer, файл также не является изображением, а только сообщение о том, что изображение недействительно или повреждено. Подробная информация о моей проблеме ниже: Я имею эту форму в моей веб-странице: Upload Page 1INSERT BASE64 ФАЙЛ В ORACLE BLOB ИСПОЛЬЗОВАНИЕ PHP
Кнопка «+» является входной файл, который при нажатии, пользователь может выбрать один или несколько файлов для загрузки и этих файлов показали на предварительном просмотре, как вы можете увидеть ниже: Upload Page 2
пользователь может открыть входной файл, selecet сколько изображений он хочет, близкий входной файл и повторно открыть его, чтобы добавить больше файлов, сколько раз он хочет. Для добавления каждого файла, Javascript создать предварительный просмотр и установить base64 в HREF «а» элемента, как показано ниже:
//create preview
$("#exams-fileinput").on('change',function(e){
var input = $(this);
var files = input.prop('files');
var countFiles = files.length;//alert(files.length);
if (window.File && window.FileReader){
var allow = /png|jpg|jpeg|tiff|pdf$/i;
// com suporte a FileReader()
for(i= 0;i <countFiles; i++){
file = files[i];
if(!allow.test(file.name)){continue;}
imageType = /image.*/;
reader = new FileReader();
reader.onload = function(e){
filePreview = e.target;
var fileName = file.name;
var fileResult = filePreview.result;
var fileThumb = file.type.match(imageType) ? fileResult : 'assets/img/file-document.png'; // https://cdn4.iconfinder.com/data/icons/office-20/128/OFFice-51-256.png assets/img/file-document.png
var classIframe = file.type.match(imageType) ? '' : 'fancybox.iframe';
var imgPrevContent =
'<div name="file-added" class="col-xs-6 col-sm-4 col-md-3 ms-file-thumbnail-preview-item" >'+ '<a href="'+fileResult+'" class="ms-filedata fancybox '+classIframe+'" rel="exam" data-type="img" data-file-name="'+fileName+'">'+ //<= aqui vai entrar o "fancybox.iframe", se necessário <= Vamos obter daqui o código do arquivo para subir ".ms-filedata"
'<figure class="img-responsive img-thumbnail" style="background-image:url('+fileThumb+');">'+
'<figcaption>'+
'<p><i class="fa fa-eye fa-3x"></i><p>'+
'<p class="ms-ellipsis">'+fileName+'</p>'+
'</figcaption>'+
'</figure>'+
'</a>'+
'<input type="file" value="'+fileResult+'" id="" style="display: none;">'+
'</div>';
console.log('Nome do arquivo: '+fileName+' - Tamanho: '+ file.size+' - HTML: '+imgPrevContent.length);
fileName='';
$("#exam-view-files").append(imgPrevContent);
};
reader.readAsDataURL(file);
}
}else{
// browser doesn't supor file reader
}
});
Когда пользователь нажимает на кнопку сохранить «Salvar», я беру все bases64 файлов добавленных и посланный AJAX для сохранения в поле BLOB в моей базе данных ORACLE 11g R2, как показано ниже:
//save function
$("#btn-save-files").click(function(e){
var filesToAdd = [];
$("div[name=file-added]").each(function(e){
filesToAdd.push({
content: $(this).children("a").attr("href"),
name: $(this).children("a").data("file-name")
});
});
$.ajax({
type: 'POST',
url: 'controller/ctrl-person-profile-action.php',
data: { action: "insertfiles",
files: filesToAdd
},
datatype: "json",
async: true,
success: function(response){
response = JSON.parse(response);
switch(response["status"].toLowerCase()){
case "success": swal("Pronto", "Adicionado com sucesso", "success");
break;
case "fail": swal("Atenção", response["message"], "warning");
break;
default: swal("Ops..", "Ocorreu um erro inesperado ao inserir o medicamento", "error");
break;
}
}
});
}
и взять эти файлы и сохранить на PHP, как показано ниже:
//Ajax calls this function
function InsertFiles(){
$files = isset($_REQUEST['files']) ? $_REQUEST['files'] : null;
foreach ($files as $file) {
$fileBase64 = explode(",", explode(";", $file["content"])[1])[1];
$fileType = explode(":",(explode(";", $file["content"])[0]))[1];
$fileInsert = new MyFileClass();
$fileInsert->setFile($fileBase64);
$fileInsert->setType($fileType);
$fileInsert->Insert();
}
//Class MyFile method insert:
public function Insert(){
$sql = "INSERT FILES (ID,
MIME_TYPE,
FILE)
VALUES(SEQ_FILES.NEXTVAL,
'$this->type,
EMPTY_BLOB()
) RETURNING FILE INTO :file";
$conn = GetDBConnection();
$statment = oci_parse($conn, $sql)
// Creates an "empty" OCI-Lob object to bind to the locator
$fileBlob = oci_new_descriptor($conn, OCI_DTYPE_LOB);
// Bind the returned Oracle LOB locator to the PHP LOB object
oci_bind_by_name($statment, ":file", $fileBlob, -1, OCI_B_BLOB);
// Execute the statement using , OCI_DEFAULT - as a transaction
oci_execute($statment, OCI_DEFAULT)
or die ("Erro execute SQL command");
// Now save a value to the LOB
if (!$fileBlob->save('INSERT: '.base64_decode($this->file))) {
// On error, rollback the transaction
oci_rollback($conn);
die("Erro execute SQL command");
} else {
// On success, commit the transaction
oci_commit($conn);
}
// Free resources
oci_free_statement($statment);
$fileBlob->free();
//feca conexão
oci_close($conn);
}
Может кто-нибудь дать мне некоторые помощь саам e этот файл base64 в поле BLOB на ORACLE и получить действительный файл из моего BLOB?
Thx много!