mirror of
https://github.com/24eme/signaturepdf.git
synced 2023-08-25 09:33:08 +02:00
Plus besoin du premier upload et vérification de la taille maximum
d'upload en js sur le premier écran pour évité d'être bloqué à l'upload du php pour la signature
This commit is contained in:
parent
0b65daed8b
commit
07acab564b
77
app.php
77
app.php
@ -10,53 +10,42 @@ $f3->set('ROOT', __DIR__);
|
|||||||
$f3->set('UI', $f3->get('ROOT')."/templates/");
|
$f3->set('UI', $f3->get('ROOT')."/templates/");
|
||||||
$f3->set('UPLOADS', sys_get_temp_dir()."/");
|
$f3->set('UPLOADS', sys_get_temp_dir()."/");
|
||||||
|
|
||||||
|
function convertPHPSizeToBytes($sSize)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
$sSuffix = strtoupper(substr($sSize, -1));
|
||||||
|
if (!in_array($sSuffix,array('P','T','G','M','K'))){
|
||||||
|
return (int)$sSize;
|
||||||
|
}
|
||||||
|
$iValue = substr($sSize, 0, -1);
|
||||||
|
switch ($sSuffix) {
|
||||||
|
case 'P':
|
||||||
|
$iValue *= 1024;
|
||||||
|
// Fallthrough intended
|
||||||
|
case 'T':
|
||||||
|
$iValue *= 1024;
|
||||||
|
// Fallthrough intended
|
||||||
|
case 'G':
|
||||||
|
$iValue *= 1024;
|
||||||
|
// Fallthrough intended
|
||||||
|
case 'M':
|
||||||
|
$iValue *= 1024;
|
||||||
|
// Fallthrough intended
|
||||||
|
case 'K':
|
||||||
|
$iValue *= 1024;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return (int)$iValue;
|
||||||
|
}
|
||||||
|
|
||||||
$f3->route('GET /',
|
$f3->route('GET /',
|
||||||
function($f3) {
|
function($f3) {
|
||||||
$f3->set('key', hash('md5', uniqid().rand()));
|
$f3->set('key', hash('md5', uniqid().rand()));
|
||||||
|
$f3->set('maxSize', min(array(convertPHPSizeToBytes(ini_get('post_max_size')), convertPHPSizeToBytes(ini_get('upload_max_filesize')))));
|
||||||
|
|
||||||
echo View::instance()->render('index.html.php');
|
echo View::instance()->render('index.html.php');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
$f3->route('POST /upload',
|
|
||||||
function($f3) {
|
|
||||||
$key = $f3->get('POST.key');
|
|
||||||
|
|
||||||
if(!$key || !preg_match('/^[0-9a-z]+$/', $key)) {
|
|
||||||
$f3->error(403);
|
|
||||||
}
|
|
||||||
|
|
||||||
$files = Web::instance()->receive(function($file,$formFieldName){
|
|
||||||
if(Web::instance()->mime($file['tmp_name'], true) != 'application/pdf') {
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}, true, function($fileBaseName, $formFieldName) use ($key) {
|
|
||||||
return $key.".pdf";
|
|
||||||
});
|
|
||||||
|
|
||||||
$filePdf = null;
|
|
||||||
foreach($files as $file => $valid) {
|
|
||||||
if(!$valid) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$filePdf = $file;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!$filePdf) {
|
|
||||||
$f3->error(403);
|
|
||||||
}
|
|
||||||
|
|
||||||
if($f3->get('DEBUG')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
unlink($filePdf);
|
|
||||||
|
|
||||||
return $f3->reroute('/'.$key);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
$f3->route('GET /@key',
|
$f3->route('GET /@key',
|
||||||
function($f3) {
|
function($f3) {
|
||||||
$f3->set('key', $f3->get('PARAMS.key'));
|
$f3->set('key', $f3->get('PARAMS.key'));
|
||||||
@ -64,12 +53,6 @@ $f3->route('GET /@key',
|
|||||||
echo View::instance()->render('pdf.html.php');
|
echo View::instance()->render('pdf.html.php');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
$f3->route('GET /@key/pdf',
|
|
||||||
function($f3) {
|
|
||||||
$key = $f3->get('PARAMS.key');
|
|
||||||
Web::instance()->send($f3->get('UPLOADS').$key.'.pdf');
|
|
||||||
}
|
|
||||||
);
|
|
||||||
$f3->route('POST /image2svg',
|
$f3->route('POST /image2svg',
|
||||||
function($f3) {
|
function($f3) {
|
||||||
$files = Web::instance()->receive(function($file,$formFieldName){
|
$files = Web::instance()->receive(function($file,$formFieldName){
|
||||||
|
@ -13,19 +13,12 @@
|
|||||||
<div class="px-4 py-5 my-5 text-center">
|
<div class="px-4 py-5 my-5 text-center">
|
||||||
<h1 class="display-5 fw-bold"><i class="bi bi-vector-pen"></i> Signer un PDF</h1>
|
<h1 class="display-5 fw-bold"><i class="bi bi-vector-pen"></i> Signer un PDF</h1>
|
||||||
<div class="col-lg-3 mx-auto">
|
<div class="col-lg-3 mx-auto">
|
||||||
<form id="form_pdf_upload" action="/upload" method="POST" class="row g-3" enctype="multipart/form-data">
|
|
||||||
<input id="input_key" name="key" type="hidden" value="<?php echo $key ?>">
|
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<label for="input_pdf_upload" class="form-label">Choisir un PDF</label>
|
<label for="input_pdf_upload" class="form-label">Choisir un PDF</label>
|
||||||
<input id="input_pdf_upload" class="form-control form-control-lg" name="pdf" type="file" accept=".pdf,application/pdf">
|
<input id="input_pdf_upload" class="form-control form-control-lg" type="file" accept=".pdf,application/pdf">
|
||||||
<a class="btn btn-sm btn-link opacity-75" href="/#https://raw.githubusercontent.com/24eme/signaturepdf/master/tests/files/document.pdf">(Tester avec un PDF de démo)</a>
|
<p><small class="text-muted">(Le PDF ne doit pas dépasser <?php echo round($maxSize / 1024 / 1024) ?> mo)</small></p>
|
||||||
|
<a class="btn btn-sm btn-link opacity-75" href="/#https://raw.githubusercontent.com/24eme/signaturepdf/master/tests/files/document.pdf">Tester avec un PDF de démo</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12">
|
|
||||||
<div class="d-grid gap-2">
|
|
||||||
<button class="btn btn-light" type="submit" id="save"><i class="bi bi-upload"></i> Transmettre le PDF</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<footer class="text-center text-muted mb-2 fixed-bottom">
|
<footer class="text-center text-muted mb-2 fixed-bottom">
|
||||||
@ -36,18 +29,25 @@
|
|||||||
(async function () {
|
(async function () {
|
||||||
const cache = await caches.open('pdf');
|
const cache = await caches.open('pdf');
|
||||||
var key = "<?php echo $key ?>";
|
var key = "<?php echo $key ?>";
|
||||||
|
var urlPdf = '/'+key+'/pdf';
|
||||||
|
var urlSignature = '/'+key;
|
||||||
var pdfHistory = {};
|
var pdfHistory = {};
|
||||||
|
var maxSize = <?php echo $maxSize ?>;
|
||||||
if(localStorage.getItem('pdfHistory')) {
|
if(localStorage.getItem('pdfHistory')) {
|
||||||
pdfHistory = JSON.parse(localStorage.getItem('pdfHistory'));
|
pdfHistory = JSON.parse(localStorage.getItem('pdfHistory'));
|
||||||
}
|
}
|
||||||
document.getElementById('input_pdf_upload').addEventListener('change', async function(event) {
|
document.getElementById('input_pdf_upload').addEventListener('change', async function(event) {
|
||||||
var response = new Response(document.getElementById('input_pdf_upload').files[0], { "status" : 200, "statusText" : "OK" });
|
if(document.getElementById('input_pdf_upload').files[0].size > maxSize) {
|
||||||
await cache.put('/'+key+'/pdf', response);
|
|
||||||
console.log(await (await cache.match('/'+key+'/pdf')).blob());
|
|
||||||
|
|
||||||
|
alert("Le PDF ne doit pas dépasser <?php echo round($maxSize / 1024 / 1024) ?> mo");
|
||||||
|
document.getElementById('input_pdf_upload').value = "";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var response = new Response(document.getElementById('input_pdf_upload').files[0], { "status" : 200, "statusText" : "OK" });
|
||||||
|
await cache.put(urlPdf, response);
|
||||||
pdfHistory[key] = { filename: document.getElementById('input_pdf_upload').files[0].name }
|
pdfHistory[key] = { filename: document.getElementById('input_pdf_upload').files[0].name }
|
||||||
localStorage.setItem('pdfHistory', JSON.stringify(pdfHistory));
|
localStorage.setItem('pdfHistory', JSON.stringify(pdfHistory));
|
||||||
document.getElementById('form_pdf_upload').submit();
|
document.location = urlSignature;
|
||||||
});
|
});
|
||||||
async function uploadFromUrl(url) {
|
async function uploadFromUrl(url) {
|
||||||
var response = await fetch(url);
|
var response = await fetch(url);
|
||||||
|
Loading…
Reference in New Issue
Block a user