Skip to content
Snippets Groups Projects
Commit 2e1e4816 authored by Armand Bahi's avatar Armand Bahi
Browse files

Upload multiple files 1

parent de8419d7
Branches
Tags
No related merge requests found
......@@ -51,6 +51,9 @@ class Querys extends Vmap {
$this->aProperties = $properties;
$this->aValues['getGroup'] = false;
$this->oConnection = new Connection($this->aValues, $this->aProperties);
// error_log('$_FILES: '. print_r($_FILES, true));
// error_log('$aValues: '. print_r($this->aValues, true));
}
/**
......@@ -841,10 +844,18 @@ class Querys extends Vmap {
foreach ($aLigne['bo_' . $type] as $key => $value) {
if (is_dir($sDataDir . "/" . $key)) {
$aFiles = explode('|', $value);
if (count($aFiles) > 1) {
$aLigne['bo_' . $type][$key] = [];
for ($i=0; $i < count($aFiles); $i++) {
array_push($aLigne['bo_' . $type][$key], $sDataUrl . "/" . $key . "/" . $aFiles[$i] . "?d=" . $date->getTimestamp());
}
} else {
$aLigne['bo_' . $type][$key] = $sDataUrl . "/" . $key . "/" . $value . "?d=" . $date->getTimestamp();
}
}
}
}
// Nombre total d'éléments dans la table
if (!empty($iTotalRowNumber)) {
......@@ -1451,7 +1462,7 @@ class Querys extends Vmap {
return $sMessage;
}
// Mise en place des fichiers
$this->aValues = $this->extractFilesFromValues($this->aValues, $sDirPath);
$this->aValues = $this->extractFiles($this->aValues, $sDirPath);
}
$aReturn = $this->genericPut($bo_schema, $bo_table, $bo_id_field);
......@@ -1467,39 +1478,53 @@ class Querys extends Vmap {
return $aReturn['sMessage'];
}
/**
* Extract the files from aValues and modify the paths
* @param array $aValues
* @param string $sDirPath
* @param string $sFilePrefix
* @return array Parsed $aValues
*/
function extractFilesFromValues($aValues, $sDirPath) {
foreach ($aValues as $key => $value) {
if (strrpos($key, '_file')) {
$sName = substr($key, 0, strrpos($key, '_file'));
$sFileName = $aValues[$sName . '_name'];
function extractFile($aValues, $sName, $oFile, $sDirPath) {
if (!empty($sFileName)) {
if (!empty($sName) && !empty($oFile['name']) && !empty($oFile['file'])) {
// Crée le dossier si besoin
$sDirColumnPath = $sDirPath . '/' . $sName;
if (!is_dir($sDirColumnPath)) {
mkdir($sDirColumnPath, 0777, true);
}
// Cŕee le fichier sur le serveur
$fp = fopen($sDirColumnPath . '/' . $sFileName, "w");
fwrite($fp, $value);
$fp = fopen($sDirColumnPath . '/' . $oFile['name'], "w");
fwrite($fp, $oFile['file']);
fclose($fp);
// Mise en place pour la base de données
$aValues[$sName] = $aValues[$sName . '_name'];
if (empty($aValues[$sName])) {
$aValues[$sName] = $oFile['name'];
} else {
$aValues[$sName] .= '|' . $oFile['name'];
}
if (!empty($aValues[$sName . '_file'])) {
unset($aValues[$sName . '_file']);
}
if (!empty($aValues[$sName . '_name'])) {
unset($aValues[$sName . '_name']);
}
}
return $aValues;
}
function extractFiles($aValues, $sDirPath) {
foreach ($_FILES as $key => $value) {
if (!empty($value['file'])) {
$aValues = $this->extractFile($aValues, $key, $value, $sDirPath);
}
if (!empty($value[0])) {
for ($i=0; $i < count($value); $i++) {
if (!empty($value[$i]['file'])) {
$aValues = $this->extractFile($aValues, $key, $value[$i], $sDirPath);
}
}
}
}
return $aValues;
......@@ -1620,6 +1645,7 @@ class Querys extends Vmap {
$sMessage = $oError->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
return $sMessage;
}
// Écriture du fichier
foreach ($_FILES as $sName => $aFile) {
......@@ -1628,11 +1654,35 @@ class Querys extends Vmap {
mkdir($sDirColumnPath, 0777, true);
}
// Fichiers multiples
if (is_array($aFile['name'])){
$this->aValues[$sName] = "";
for ($i=0; $i < count($aFile['name']); $i++) {
// Remplace la valeur en base par le nom du fichier
if (empty($this->aValues[$sName])) {
$this->aValues[$sName] = $aFile['name'][$i];
} else {
$this->aValues[$sName] .= '|' . $aFile['name'][$i];
}
// Écrit le fichier dans son enplacement
uploadFile($sName, "", $sDirColumnPath . "/" . $aFile['name'][$i], $aFile['size'][$i], $aFile['tmp_name'][$i]);
}
}
// Fichier simple
else {
// Remplace la valeur en base par le nom du fichier
$this->aValues[$sName] = $aFile['name'];
// Écrit le fichier dans son enplacement
uploadFile($sName, "", $sDirColumnPath . "/" . $aFile['name'], $aFile['size'] + 1);
uploadFile($sName, "", $sDirColumnPath . "/" . $aFile['name'], $aFile['size']);
}
}
$this->genericPut($bo_schema, $bo_table, $bo_id_field);
}
......
......@@ -58,31 +58,38 @@ if (!empty($boundary)) {
// handle your fields here
// Ce champ est un fichier ()?
if (!empty($filename)) {
// Internet Explorer passe le chemin complet vers le fichier.
$aFilenamePathInfo = pathinfo($filename);
$filename = $aFilenamePathInfo['filename'] . '.' . $aFilenamePathInfo['extension'];
//
// Multiples documents
if (substr($name, -2) == '[]') {
$_FILES[substr($name, 0, -2)][] = array(
"file" => substr($body, 0, strlen($body) - 2),
"name" => $filename
);
}
// Documents simples
else {
$_PUTDATA[$name . "_file"] = substr($body, 0, strlen($body) - 2);
$_PUTDATA[$name . "_name"] = $filename;
} else
// Utilisation de $_FILES
$_FILES[$name] = array(
"file" => substr($body, 0, strlen($body) - 2),
"name" => $filename
);
}
} else {
$_PUTDATA[$name] = substr($body, 0, strlen($body) - 2);
/*
switch ($name) {
// this is a file upload
case 'userfile':
file_put_contents($filename, $body);
break;
// default for all other files is to populate $data
default:
$_PUTDATA[$name."_file"] = substr($body, 0, strlen($body) - 2);
$_PUTDATA[$name."_name"] = $filename;
break;
}
*/
}
}
}
error_log('$_POST: '. print_r($_POST, true));
error_log('$_FILES: '. print_r($_FILES, true));
$aParamsJson = json_decode(file_get_contents('php://input'), true);
if ($_PUTDATA != null) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment