Datei Upload Tuning

eLPiecho
Beiträge: 7
Registriert: Di 14. Dez 2004, 07:35
Wohnort: Hamburg
Kontaktdaten:

Datei Upload Tuning

Beitrag von eLPiecho » Mi 15. Dez 2004, 16:47

Hallo,

ich möchte bei einer meiner Contenido Instalationen den Datei-Upload etwas Tunen. Und zwar soll wenn ein Bild hochgeladen wird, dieses gleich auf eine größe von x*y verkleinert werden. Außerdem soll (viel später) mal die Funktion entstehen, dass ein hochgeladenes Zip-Archiv automatisch entpackt wird und die enthaltenen Fotos dann anschließend auch verkleinert werden Aber das erst später.

Meine Frage nun welche Dateien betreffen den Upload und müßen geändert werden?? Gibt es etwas zu beachten oder gibt es vielleicht schon eine Erweiterung die so etwas kann??

Grüße aus HH
Lars

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Mi 15. Dez 2004, 17:25

nun, die frage die sich stellt ist: willst du die verkleinerung wirklich bereits beim upload vornehmen? oder nicht doch besser erst bei verwendung und in eine dann konfigurierbare grösse?

das würde dir etwas mehr flexibilität geben, falls du mal andere als die programmierten grössen der bilder benötigst.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

eLPiecho
Beiträge: 7
Registriert: Di 14. Dez 2004, 07:35
Wohnort: Hamburg
Kontaktdaten:

Beitrag von eLPiecho » Mi 15. Dez 2004, 17:44

Nun, die Sache ist die. Das ganze soll eine Art Schutzmechanismus vor DAUs sein. Ich möchte einfach eine maximale größe für Bilder angeben, die die Nutzer nicht ändern können. Zum einen soll das verhindern, dass ich die Script-Limits des Providers sprenge und zum anderen möchte ich auch nicht zuviel Speicherplatz für die Bilder verbrauchen.

Die Bilder würden auf eine Maximale Größe von 640*400 oder von mir aus auch etwas größer, verkleinert. Am liesten möchte ich das ganze dann auch noch mit ImageMagick lösen und JPEGs auf 70% Qualität reduzieren.

zur Zeit habe ich das Problem, das mein Kunde immer wieder mal ein Foto von der neuen Canon IXUS mit 5 Meagpixel, hochlädt. Dann bekommt er in der Dateiverwaltung im entsprechenden Verzeichnis nur noch einen Skriptfehler angezeigt, weil kein Thumb erzeugt werden kann. Dann muß ich das wieder per FTP ausbügeln und genau das möchte ich verhindern...

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Mi 15. Dez 2004, 18:37

ok! ich sehe die situation erfordert gnadenlose stringenz... :wink:

viel glück bei der umsetzung!

gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

eLPiecho
Beiträge: 7
Registriert: Di 14. Dez 2004, 07:35
Wohnort: Hamburg
Kontaktdaten:

Beitrag von eLPiecho » Mi 22. Dez 2004, 00:13

:( grr...

OK, ich geb mich geschlagen... mit meinen drei Sätzen PHP und meinen schon ausgereifteren C Kenntnissen komme ich hier nicht weiter. Zwar habe ich im Contenido Code offenbar die richtigen Stellen gefunden (immer hin kann ich genau die Funktionen zerstören die ich ändern möchte 8) ), doch komme ich dann nicht wirklich weiter.

Leider fehlt mir auch die Zeit mich erst in PHP einzuarbeiten. Da werde ich zwar auf Dauer nicht drum rum kommen, aber jetzt geht das nicht.

Wenn das hier jemand liest, der sagt: "Das programmier ich Dir in der Kaffeepause!", oder der einen Vorschlag hat wie man das Problem (dass zu große Bilder auf den Server kommen) anderes serverseitig lösen kann, der möge sich bitte bei mir melden.

Weihnachtliche Grüße

Lars

PS: es muß natürlich nicht kostenlos sein, ich würde mich aber über ein kleines Weihnachtsgeschenk freuen... :wink:

swelpot
Beiträge: 101
Registriert: Mo 26. Jul 2004, 20:42
Wohnort: Rhein-Main
Kontaktdaten:

Beitrag von swelpot » Mi 22. Dez 2004, 12:39

hi,

ich denke, dass die folgende Veränderung der includes/include.upl_files_overview.php deiner ersten Intention genügen müsste.

(ab Zeile 107):

Code: Alles auswählen

if ($action == "upl_upload")
{
	$tempFilename = ""; //string
	$orgFilename = ""; //string
	$newFilename = ""; //string
	
	if (count($_FILES) == 1)
	{
		foreach ($_FILES['file']['name'] as $key => $value)
		{
			if (file_exists($_FILES['file']['tmp_name'][$key]))
			{
				$tempFilename = $_FILES['file']['tmp_name'][$key];
				$orgFilename = $_FILES['file']['name'][$key];
				$newFilename = uplCreateFriendlyName($orgFilename);
				
        		if (is_dbfs($qpath))
        		{
        			$dbfs->writeFromFile($tempFilename, $qpath.$newFilename);
        			unlink($tempFilename);
        
        		} else {
        			move_uploaded_file($tempFilename, $cfgClient[$client]['upl']['path'].$path.$newFilename);
        		}
        		
        		
        		$maxBildbreite = 640;
				$maxBildhoehe = 480;
				
				$filetype = strtolower(substr($newFilename, strlen($newFilename) -4, 4));
				
				if(strcmp(".gif", $filetype) == 0 ||
				   strcmp(".png", $filetype) == 0 ||
				   strcmp(".jpg", $filetype) == 0 ||
				   strcmp("jpeg", $filetype) == 0
				) {
					capiImgScale($newFilename, $maxBildbreite, $maxBildhoehe, false, false, 10, true);
				}
        		
			}
		}	
	}
}

die maximale Bildgröße ist jetzt zwar fest verankert, aber ein aufbohren der $cfg- oder $client-Variablen bleibt ja Dir überlassen...

Ich hoffe es funktioniert, testen klappt hier bei mir zur Zeit leider nicht. Kannst ja mal kurz Rückmeldung geben...

Grüße

Stefan

eLPiecho
Beiträge: 7
Registriert: Di 14. Dez 2004, 07:35
Wohnort: Hamburg
Kontaktdaten:

Beitrag von eLPiecho » Do 23. Dez 2004, 14:15

Sorry ich konnte nicht feststellen, wo ich Deinen Code am besten einbaue in Zeile 107 der Datei steht bei mir:

Code: Alles auswählen

 $uploadform .=  '<tr class="text_medium" style="background-color: '.$cfg["color"]["table_dark"].';" >';
Da wird also gerade das Formular gebastelt. Ich konnte in der ganzen Datei keine stelle finden die auch nur im entferntesten mit Deinem Code übereinstimmt. Kannst Du mal die komplette Datei posten??

swelpot
Beiträge: 101
Registriert: Mo 26. Jul 2004, 20:42
Wohnort: Rhein-Main
Kontaktdaten:

Beitrag von swelpot » Do 23. Dez 2004, 14:27

der code ist für 4.5.2.
sorry, hab ich nicht erwähnt...
in 4.4.4 sieht die uploaderei komplett anders aus...
muss ich erst nochmal drüber schauen...

swelpot
Beiträge: 101
Registriert: Mo 26. Jul 2004, 20:42
Wohnort: Rhein-Main
Kontaktdaten:

Beitrag von swelpot » Do 23. Dez 2004, 16:27

so hier ist jetzt was für 4.4.4

datei contenido/includes/functions.upl.php
funktion uplupload(); Zeile 191:

Code: Alles auswählen

function uplupload($path,$userfile,$userfile_name,$userfile_size) {
        global $cfgClient, $client, $cfg, $db, $HTTP_POST_FILES;

        $ArrayCount = count($userfile);
        for ($i=0; $i<$ArrayCount; $i++)
        {
                if ($userfile_name[$i] && $userfile_size[$i]) {

                        $userfile_name[$i] = strtr($userfile_name[$i],'ÄÖÜäöüßé?>\/:\"*<>|#+','AOUaouse--------------');
                        //rplace space

                        $userfile_name[$i] =preg_replace("/\s/","",$userfile_name[$i]);

                        $file_type = substr(strrchr ($userfile_name[$i], "."),1);
                        $file_type = strtolower($file_type);
                        $userfile_name[$i]=substr_replace($userfile_name[$i],$file_type,strrpos($userfile_name[$i],".")+1);


                        if (ereg("".$cfgClient['upl']['forbidden']."",strtolower($userfile_name[$i]))) {
                                $errno = "0705";
                        } else {

                                if (@move_uploaded_file($userfile[$i],$cfgClient[$client]['upl']['path'].$path.$userfile_name[$i])) {
										chmod($cfgClient[$client]['upl']['path'].$path.$userfile_name[$i],0644);


										//Hochgeladene Bild sofort auf maximale Größe verkleinern
										$maxBildbreite = 640;
										$maxBildhoehe = 480;
										
										$filetype = strtolower(substr($userfile_name[$i], strlen($userfile_name[$i]) -4, 4));
										
										if(strcmp(".gif", $filetype) == 0 ||
										   strcmp(".png", $filetype) == 0 ||
										   strcmp(".jpg", $filetype) == 0 ||
										   strcmp("jpeg", $filetype) == 0
										) {
											capiImgScale($cfgClient[$client]['upl']['path'].$path.$userfile_name[$i], $maxBildbreite, $maxBildhoehe, false, false, 10);
										}


                                        $file_time = filemtime($cfgClient[$client]['upl']['path'].$path.$userfile_name[$i]);
                                        //$file_time = date("Y-m-d H:i:s", $file_time);


                                        $sql = "SELECT idupl
                                                FROM ".$cfg["tab"]["upl"]."
                                                WHERE idclient='$client' AND filename='$userfile_name[$i]' AND dirname='$path' AND filetype='$file_type'";

                                        $db->query($sql);
                                        if ($db->next_record()) {

                                        } else {
                                                $sql = "INSERT INTO ".$cfg["tab"]["upl"]."
                                                                (idupl, idclient, filename, dirname, filetype, size, description, created, lastmodified)
                                                                VALUES
                                                                ('".$db->nextid($cfg["tab"]["upl"])."', '$client','$userfile_name[$i]','$path','$file_type','$userfile_size[$i]','', now(), now())";

                                                $db->query($sql);

                                        }

                                }

                                else {
                                        $errno = "0703";
                                }
                        }
                }
        }

        if ( isset($errno) ){
                return $errno;
        }
}
Grüße

Stefan

NobodyBody
Beiträge: 80
Registriert: Di 14. Sep 2004, 08:14
Kontaktdaten:

Beitrag von NobodyBody » Di 28. Dez 2004, 19:50

Hallo,

soweit so gut; das Bild wird verkleinert im cache-Verzeichnis angelegt. :wink:
Wo muß ich aber eingreifen, damit ich das verkleinerte Bild in der Backend/Dateiverwaltung mit allen richtigen Daten (Dateigröße, Bildgröße) vorfinde.

In der Datei 'include.upl_files_overview.php' habe ich schon den Aufbau der Dateiverwaltung gefunden, aber wenn ich den Button 'Datei hochladen'
auslöse, ist mir nicht klar welche weiteren Funktionen ausgeführt werden.:roll:

Kann mir jemand einen kleinen Tipp geben, wo ich hier anfassen muß :?:

mfg

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Mi 29. Dez 2004, 09:13

swelpot hat geschrieben:so hier ist jetzt was für 4.4.4

datei contenido/includes/functions.upl.php
funktion uplupload(); Zeile 191:
[...]
Je nach eingesetzter GD-Version ist es wahrscheinlich sinnvoll anstatt capiImgScale die Funktion capiImgScaleHQ (ab GD 2.x) zu nutzen. Das dürfte etwas schönere Ergebnisse produzieren.

clemens
Beiträge: 72
Registriert: Do 13. Nov 2003, 11:32
Kontaktdaten:

Beitrag von clemens » Sa 19. Feb 2005, 17:45

hallo könntet ihr mir das noch einmal genauer erklären, wie das funktioniert und was ich tun muss, um einen upload resize zu bekommen!?

ich bräuchte dringendst so eine funktion, meine redakteure zerschießen mir ständig die layouts mit zu grpßen bildern!

danke im voraus!

adifl
Beiträge: 2
Registriert: Do 12. Mai 2005, 19:27
Kontaktdaten:

dateiverwaltung - upload resizen mit 4.4.5 ?

Beitrag von adifl » Fr 13. Mai 2005, 12:06

hallo

hab den code ausgetauscht in functions.upl.php, bei mir wird aber nichts geändert in der grösse des Bildes.jpg ? wenn ich in der Dateiverwaltung Bilder uploade.

vielen dank, adifl

swelpot
Beiträge: 101
Registriert: Mo 26. Jul 2004, 20:42
Wohnort: Rhein-Main
Kontaktdaten:

Update für v4.6.4

Beitrag von swelpot » Mi 28. Dez 2005, 19:07

Hallo,

ich habe die oben beschriebene Funktionalität mal auf v4.6.4 gehoben.
Die Umsetzung geschieht jetzt dank Chains etwas einfacher.

Die maximale Bildbreite/-höhe ist über die Mandanteneinstellungen konfigurierbar. Ob eine Bildskalierung beim Upload tatsächlich stattfindet wird über die Benutzer- bzw. Gruppeneinstellungen definiert.

Weitere Anleitung findet sich im Kommentar der Chain.


Hier die Chain:
(als Datei include.chain.upload.upload_preprocess.php im Verzeichnis contenido/plugins/chains/includes erstellen)

Code: Alles auswählen

<?php
/**
 * include.chain.upload.upload_preprocess.php
 *
 * Automatische Bildskalierung beim Upload von Bildern in der Dateiverwaltung
 *
 * maximale Bildbreite/-höhe über die Mandanteneigenschaften
 *   - upload, automaticImageScaleWidth, maximale Bildbreite
 *   - upload, automaticImageScaleHeight, maximale Bildhöhe
 * Einschalten der Bildskalierung über die Benutzer- bzw. Gruppeneinstellungen
 *   - upload, automaticImageScale, true
 *
 * Einbinden der Chain in Datei "contenido/plugins/chains/includes/config.plugin.php":
 * cInclude("plugins", "chains/includes/include.chain.upload.upload_preprocess.php");
 * $_cecRegistry->addChainFunction("Contenido.Upload.UploadPreprocess", "cecUploadUploadPreprocess");
 *
 * @version 1.0
 * @author Stefan Welpot
 * 28.12.2005
 */
cInclude('classes', 'contenido/class.client.php');

function cecUploadUploadPreprocess ($tmp_name, $path)
{
  global $auth, $cfgClient, $client;
  $defaultBildbreite = 640;
  $defaultBildhoehe = 480;
  
  // nur wenn ImageScale für den Benutzer aktiviert ist
  $currentuser = new User;
  $currentuser->loadUserByUserID($auth->auth["uid"]);
  if($currentuser->getUserProperty("upload", "automaticImageScale", true)) {
  
    // maximale Bildgröße über Mandanteneinstellungen
    /*
    $properties = new PropertyCollection;
    $maxBildbreite = $properties->getValue("clientsetting", $client, "upload", "automaticImageScaleWidth");
    $maxBildhoehe = $properties->getValue("clientsetting", $client, "upload", "automaticImageScaleHeight");
    */ 

    $cApiClient = new cApiClient($client);
    $maxBildbreite = $cApiClient->getProperty("upload", "automaticImageScaleWidth");
    $maxBildhoehe = $cApiClient->getProperty("upload", "automaticImageScaleHeight");
    
    
    if(!is_numeric($maxBildbreite)) {
      $maxBildbreite = $defaultBildbreite;
    }
    if(!is_numeric($maxBildhoehe)) {
      $maxBildhoehe = $defaultBildhoehe;
    }
    
    $newFilename = "";
    
    $filetype = strtolower(substr($tmp_name, strlen($tmp_name) -4, 4));
    if(strcmp(".gif", $filetype) == 0 ||
       strcmp(".png", $filetype) == 0 ||
       strcmp(".jpg", $filetype) == 0 ||
       strcmp("jpeg", $filetype) == 0
    ) {
       $newFilename = capiImgScale($tmp_name, $maxBildbreite, $maxBildhoehe, false, false, 1, true);
    }
    $newFilename = str_replace($cfgClient[$client]["path"]["htmlpath"], $cfgClient[$client]["path"]["frontend"], $newFilename);
    return $newFilename;
  }
  
  return false;
}
?>
Grüße

Stefan

swelpot
Beiträge: 101
Registriert: Mo 26. Jul 2004, 20:42
Wohnort: Rhein-Main
Kontaktdaten:

Re: Datei Upload Tuning

Beitrag von swelpot » Mi 28. Dez 2005, 19:08

und gleich hinterher noch eine Frage an eLPiecho:
eLPiecho hat geschrieben:Außerdem soll (viel später) mal die Funktion entstehen, dass ein hochgeladenes Zip-Archiv automatisch entpackt wird und die enthaltenen Fotos dann anschließend auch verkleinert werden Aber das erst später.
Gibts den Zip-Upload schon?
Grüße

Stefan

Gesperrt