NetBull
Erfahrenes Mitglied
Hi,
ich hab mir ein kleines Script gebaut das in Artikeln eines CMS (Joomla) Download-Links zu Dateien ermöglicht die nicht im Pfad des Webservers liegen. So können diese nur angemeldete Benutzer sehen und downloaden.
Funktioniert hervorragend! Leider nur im Chrome Browser. FireFox meckert das Dokument sei nicht länger verwendbar.
Zum Code:
Dazu gibt es ein clickbares ICON das in dieser Art aufgebaut wird:
Dann wird auf den Click mit diesen Funktionen reagiert:
Und hiermit wird von PHP ein Response generiert:
Wäre cool wenn mir jemand sagen kann wo mein Fehler ist.
LG NetBu||
ich hab mir ein kleines Script gebaut das in Artikeln eines CMS (Joomla) Download-Links zu Dateien ermöglicht die nicht im Pfad des Webservers liegen. So können diese nur angemeldete Benutzer sehen und downloaden.
Funktioniert hervorragend! Leider nur im Chrome Browser. FireFox meckert das Dokument sei nicht länger verwendbar.
Code:
InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable
requestObject.responseType = 'blob';
Zum Code:
Dazu gibt es ein clickbares ICON das in dieser Art aufgebaut wird:
Code:
<img
class="icon docx"
onclick="loadDocument(this);"
index="0"
src="http://192.168.178.34/file-stream/word.png"
alt="document"
title="Das ist dann der Tooltip dazu"
>
Dann wird auf den Click mit diesen Funktionen reagiert:
Javascript:
function loadDocument(element){
console.log("jQuery Version : " + jQuery.fn.jquery)
console.log("Initiate document download request");
var requestObject = getRequestObject();
requestObject.responseType = 'blob';
requestObject.open('GET', 'http://192.168.178.34/file-stream/response.php', true);
requestObject.onreadystatechange = function() {
console.log("response readyState (" + requestObject.readyState + ") and status (" + requestObject.status + ")");
if(requestObject.readyState == 4 && requestObject.status == 200) {
console.log("Final Response has been taken!");
if( requestObject.response.type!= "" ){
console.log("Seems to be a valid download ressource!");
var url = URL.createObjectURL(requestObject.response);
var a = document.createElement('a');
a.setAttribute('href', url);
a.setAttribute('download', 'test.pdf');
a.click();
URL.revokeObjectURL(url);
console.log("Download has been done!");
} else {
console.log("Seems to be an invalid download ressource!");
console.log("Download gets aborted!");
}
}
};
requestObject.send();
}
function getRequestObject(){
var returnObject;
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
console.log("initiate XMLHttpRequest");
returnObject=new XMLHttpRequest();
}
else
{
// code for IE6, IE5
console.log("initiate Microsoft.XMLHTTP request");
returnObject=new ActiveXObject("Microsoft.XMLHTTP");
}
return returnObject;
}
Und hiermit wird von PHP ein Response generiert:
PHP:
$file_path = '/var/www/docs/bescheinigung.pdf';
$file_name = 'bescheinigung.pdf';
if( file_exists($file_path) ){
header("Content-Type: application/force-download");
header("Content-type: application/pdf");
header('Content-Description: File Download');
header('Content-Disposition: attachment; filename=' . $file_name);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-length: ' . filesize($file_path));
ob_clean();
flush();
readfile($file_path);
}
Wäre cool wenn mir jemand sagen kann wo mein Fehler ist.
LG NetBu||