Ich versuche, Bilder als BLOB auf meiner ORACLE 11g R2-Datenbank durch die Base64 von hochgeladenen Dateien zu speichern, aber wenn ich diese Datei aus der DB abrufen, zeigt es nicht ein Bild mit base64_encode Funktion. Und wenn ich diese Datei von SQL Developer herunterladen, wird das Image auch nicht in der Datei gespeichert, sondern nur in einer Nachricht, dass das Image ungültig oder beschädigt ist. Details meines Problems unten: ich diese Form in meiner Web-Seite haben: Upload Page 1INSERT BASE64 DATEI IN ORACLE BLOB MIT PHP
Die Taste „+“ ist, dass eine Datei-Eingabe, wenn darauf geklickt, kann der Benutzer eine oder mehrere Dateien auswählen zu laden und diese Dateien werden gezeigt, wie Sie unten auf einer Vorschau finden Sie unter: Upload Page 2
Der Benutzer Datei-Eingabe öffnen kann, selecet, wie viele Bilder er will, in der Nähe Input-Datei und öffnen Sie es erneut mehr Dateien hinzufügen, wie oft er will. Für jede Datei hinzugefügt, ein Javascript, um die Vorschau zu erstellen und die base64 in href von „a“ Element gesetzt, wie unten:
//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
}
});
Wenn Benutzer speichern Taste klicken Sie auf „Salvar“, nehme ich alle bases64 von Dateien hinzugefügt und von ajax gesendet, wie unten in einem BLOB-Feld in meine Oracle 11g R2 Datenbank zu speichern:
//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;
}
}
});
}
und diese Dateien zu nehmen und von PHP, wie unten sparen:
//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);
}
Kann mir jemand geben einige Hilfe zu sav e diese Base64-Datei in ein BLOB-Feld auf ORACLE und eine gültige Datei aus meinem BLOB abrufen?
Vielen Dank!