Envois de fichier
Présentation
Gestion de l'envoi de fichier.
Le code source des fonctions de démo (myFuncX) est disponible dans le fichier demo.js.
Bien que la taille et l'extension soient vérifiées avant l'envoi du formulaire, il est important que le script qui réceptionne le fichier ou les fichiers revérifie ces données.
01) Dialogue d'upload avec un fichier
apijs.upload.sendFile(string title, string action, string input, number onemax, string exts, function callback, mixed args, string icon) : boolean
02) Dialogue d'upload avec plusieurs fichiers
apijs.upload.sendFiles(string title, string action, string input, number onemax, number allmax, string exts, function callback, mixed args, string icon) : boolean
Traitement du fichier
Voici une implémentation minimale du fichier qui traite le fichier avant de l'enregistrer sur le serveur.
php// stop output buffering with apache
// <Location ~ "this_file">
// php_flag zlib.output_compression off
// </Location>
// stop output buffering with lighttpd
// $HTTP["url"] =~ "this_file" {
// server.stream-response-body = 2
// }
// stop output buffering in the script (https://stackoverflow.com/a/25835968)
// the echo move the progress bar to 100%
header('Content-Encoding: chunked');
header('Content-Type: text/plain; charset=utf-8');
header('Cache-Control: no-cache, must-revalidate');
ini_set('output_buffering', (PHP_VERSION_ID < 80100) ? '0' : 0);
ini_set('implicit_flush', (PHP_VERSION_ID < 80100) ? '1' : 1);
ob_implicit_flush(true);
for ($i = 0; $i < ob_get_level(); $i++)
ob_end_clean();
echo ' ';
// action
try {
$tmpFile = tempnam(sys_get_temp_dir(), ''); // /tmp/anDY8jnU
// $_FILES['myInputImage']['tmp_name'] if one file sent, else $_FILES['myInputImage']['tmp_name'][0]...
move_uploaded_file($_FILES['myInputImage']['tmp_name'], $tmpFile);
echo 'success-'.basename($tmpFile); // success-anDY8jnU
}
catch (Throwable $t) {
echo $t->getMessage();
}
Lorsque le traitement se passe bien, le fichier qui traite le fichier doit renvoyer success-fileid.
Le fileid est transmis à la fonction callback de la manière suivante : callback(fileid, args).
Informations complémentaires
Pour le paramètre icon les classes CSS suivantes :
- peuvent être utilisées : notransition lock
- ne peuvent pas être utilisées : information confirmation options upload progress waiting photo video iframe ajax start ready end reduce mobile tiny fullscreen slideshow loading download print error warning
API
jsapijs.i18n.translate("word"); // return string
apijs.i18n.translateNode("word"); // return domelement
apijs.i18n.changeLang("fr"); // return boolean
apijs.dialog.dialogInformation(...); // return boolean
apijs.dialog.dialogConfirmation(...); // return boolean
apijs.dialog.dialogFormOptions(...); // return boolean
apijs.dialog.dialogFormUpload(...); // return boolean
apijs.dialog.dialogProgress(...); // return boolean
apijs.dialog.dialogWaiting(...); // return boolean
apijs.dialog.dialogPhoto(...); // return boolean
apijs.dialog.dialogVideo(...); // return boolean
apijs.dialog.dialogIframe(...); // return boolean
apijs.dialog.dialogAjax(...); // return boolean
apijs.dialog.actionClose(); // return void
apijs.dialog.add("string1", "string2"); // return dialog object
apijs.dialog.remove("string1", "string2"); // return dialog object
apijs.dialog.toggle("string1", "string2"); // return dialog object
apijs.dialog.has("string1", "string2"); // return boolean (true if one found)
apijs.upload.sendFile(...); // return boolean
apijs.upload.sendFiles(...); // return boolean
apijs.slideshow.show("slideshow.2.1"); // return boolean
apijs.slideshow.actionFirst(); // return boolean
apijs.slideshow.actionPrev(); // return boolean
apijs.slideshow.actionNext(); // return boolean
apijs.slideshow.actionLast(); // return boolean
// default config //////////////////////////////////////////
apijs.config.lang = "auto";
apijs.config.debug = false;
apijs.config.dialog.closeOnClick = false;
apijs.config.dialog.restrictNavigation = true;
apijs.config.dialog.player = true; // true|false|userFunction(videoTag, url)
apijs.config.slideshow.ids = "slideshow";
apijs.config.slideshow.anchor = true;
apijs.config.upload.tokenName = "X-CSRF-Token";
apijs.config.upload.tokenValue = null;
// events //////////////////////////////////////////////////
self.addEventListener("apijsbeforeload", function () {
apijs.dialog.htmlContentOrig = apijs.dialog.htmlContent;
apijs.dialog.htmlContent = function (title, text) {
alert(title);
this.htmlContentOrig(title, text);
};
if (!apijs.i18n.data.hasOwnProperty("xy")) apijs.i18n.data.xy = {};
apijs.i18n.data.xy["xyz"] = "Test";
apijs.config.debug = true;
});
self.addEventListener("apijsload", function () {
console.log("ready");
});
self.addEventListener("apijsajaxresponse", function (ev) {
console.log(ev.detail);
});