[TYPO3-UG Spain] Limitar el tamaXo en Kb de lo ficheros que se pueden subir a typo3
Nicolas Puente
nicolas.puente at lgb-rlp.de
Mon Jul 28 12:30:40 CEST 2008
¿Cómo deseas subir el fichero?
Si lo haces con un formulario, añade
<form action="input_file.htm" method="post" enctype="multipart/form-data">
<p>Elija un archivo de du ordenador:<br>
<input name="Datei" type="file" size="50" maxlength="100000" accept="text/*">
</p>
</form>
Hay un método mejor, el que te envío a continuación. No es muy presentable que al usuario se le diga "su imagen es muy grande no se sube".
Es mejor que la trabajemos y la guardemos nosotros mismos. Eso es lo que hace el siguiente script.
/**
* This handles uploads of new photos: All files are checked against a number of constraints (filetype,
* filesize, etc.). If all checks are successfull the files are moved to the configured storage folder.
*
* @param array SubArray from $_FILES, which includes information about
* uploaded files like temporary folder, size, ...
* @param int The callers $conf array (this is usually passed in the 'main()' function of a plugin.)
* evaluated values:
* formatsAllowed string of allowed extensions
* maxSize maximum size in Kb
* maxW maxwidth in pixel
* maxH maxHeight in pixel
* storageFolder directore to store the uploaded files
*
* @return string The error HTML. If no errors have occured null is returned.
*/
function handleUploadedFile($infile,$conf) {
$outfile =$infile;
$errors = null;
$imgtypes=array(1=>'gif',2=>'jpg',3=>'png');
if ( $infile['name'] != ''
&& $infile['type'] != ''
&& $infile['tmp_name'] != ''
// && checkYourOwnConditions
) {
$hasFileErrors = false;
// Check if file is OK
if (!$infile['error'] == '0' && $infile['name'] != '') {
$errors .= 'An unknown error has occured. Please contact your system administrator.';
$hasFileErrors = true;
}
// Check if file type is allowed
$type = explode('.', $infile['name']);
$type = strtolower($type[sizeof($type) - 1]);
$allowedTypes = explode(',', $conf['formatsAllowed']);
if (array_search($type, $allowedTypes) == '') {
$errors .= '"'.$infile['name'].'": this file has a wrong filetype<br/>', $conf);
$hasFileErrors = true;
}
// Check if file size is below the allowed limit
$allowedSize = $conf['maxSize'] * 1024;
$imgdim = getimagesize($infile['tmp_name']);
if ( $infile['size'] > $allowedSize // size in bytes
|| $imgdim[0] > $conf['maxW'] // width
|| $imgdim[1] > $conf['maxH'] // height
) {
if (0 < $imgdim[2] && $imgdim[2] < 4) { // valid filetype we can resize
// move file for handling with IM into directory we can access
$storageFolder = $conf['storageFolder'];
$uniqueTmpFilename = tempnam($storagefolder,'tmp_'.$infile['name']);
// Move file to configured storage directory
t3lib_div::upload_copy_move($infile['tmp_name'], $uniqueTmpFilename);
// resize image
$ts['img']='IMG_RESOURCE';
$ts['img.']['file']=$uniqueTmpFilename;
//$ts['img.']['format']=$imgtypes[$imgdim[2]]; // keep fileformat
$ts['img.']['file.']['maxW']=$conf['maxW'];
$ts['img.']['file.']['maxH']=$conf['maxH'];
$outfile['tmp_name']=$this->cObj->IMG_RESOURCE($ts['img.']);
$outfile['size']=filesize($outfile['tmp_name']);
// delete original pic
unlink($uniqueTmpFilename);
// as this file will not be moved (it is no uploaded file) we have to do it by ourself
// get final name:
$uniqueFilename = tempnam($storeagefolder,$infile['name']);
// move tmp file to final destination:
if (!rename($outfile['tmp_name'], $uniqueFilename)) {
if (copy($outfile['tmp_name'], $uniqueFilename)) {
unlink($outfile['tmp_name']);
}
}
// do further action with uploaded file:
// Create database record
// $dimensions = getimagesize($uniqueFilename);
// $this->createNewRecord($uniqueFilename, filesize($uniqueFilename), $dimensions[0], $dimensions[1]);
// no further handling needed:
$hasFileErrors= true;
$errors .= '"'.$infile['name'].'": Image was to large. It has been resized.<br/>', $conf);
} else {
// not resizeable format
$errors .= '"'.$infile['name'].'": File was to large. It has been ignored<br/>', $conf);
$hasFileErrors = true;
}
}
// Move file, if no errors have occured
if (!$hasFileErrors) {
// Make filename unique
$uniqueFilename = tempnam($conf['storageFolder'],$infile['name']);
// Move file to configured storage directory
t3lib_div::upload_copy_move($outfile['tmp_name'], $uniqueFilename);
$dimensions = getimagesize($uniqueFilename);
// do further action with uploaded file:
// Create database record
// $dimensions = getimagesize($uniqueFilename);
// $this->createNewRecord($uniqueFilename, filesize($uniqueFilename), $dimensions[0], $dimensions[1]);
}
}
return $errors;
}
More information about the TYPO3-UG-spain
mailing list