Trädvy Permalänk
Medlem
Plats
Landskrona
Registrerad
Nov 2008

PHP: Filuppladdning & imagick

Hej!

Jag försöker ladda upp pdf-dokument via ett formulär som sedan skickar det uppladdade dokumentet vidare till en funktion som skall konvertera pdf-filen till en jpg-fil och sedan skicka den vidare tillbaka till serverns minne. Jag lyckas ladda upp dokumenten, köra Imagick och spara dokumenten som .jpg i en temporär mapp.

Problemet är att jag nu inte lyckas läsa tillbaka den genererade jpg-filen till koden.

Upload.php

if ($_FILES['fileToUpload']['name'] != '') { $fileValues = uploadFile($_FILES['fileToUpload'], $_POST['isPublic'], $aList, $id, $_POST['convertToPoster'], $_POST['posterType'], $_POST['folderID']); } ... <form id="submitForm" enctype="multipart/form-data" action="upload.php" method="post"> ... <input type="file" id="fileToUpload" name="fileToUpload" class="" tabindex="1">

Upload2.php - Här filtreras pdf-dokument till en funktion som kör Imagick för att konvertera pdf-dokumenten till jpg-filer och spara dessa i en temporär mapp.

$inFile = $_FILES['fileToUpload']['tmp_name']; $outFile = TEMP_LOCATION . $info['filename'].'.jpg'; $imagick = new Imagick(); $imagick->readImage($inFile); $imagick->setImageFormat('jpg'); $imagick->writeImage($outFile);

Nu skulle jag behöva läsa tillbaka jpg-filen till Upload2.php för att sedan skicka bildfilen till nedanstående, funktionen uploadImage kör "getimagesize($file[ 'tmp_name' ]);" för att dubbelkolla storlek innan jpg-filen läggs till i databasen.

$values = uploadImage($file, $isPublic, $aList, $id, $convertToPoster, $posterTypes, $folderID);

Se nedan för en tydligare bild av vart koden jag saknar bör finnas.

} elseif (strtolower($info['extension']) == 'pdf') { $inFile = $_FILES['fileToUpload']['tmp_name']; $outFile = TEMP_LOCATION . $info['filename'].'.jpg'; $imagick = new Imagick(); $imagick->readImage($inFile); $imagick->setImageFormat('jpg'); $imagick->writeImage($outFile); --- HÄR BÖR MAN LÄSA IN JPG-FILEN IGEN OCH PASSA DEN VIDARE TILL $FILE --- $values = uploadImage($file, $isPublic, $aList, $id, $convertToPoster, $posterTypes, $folderID); $values['folderID'] = 0; }

Hur gör jag? Tips?

Trädvy Permalänk
Medlem
Registrerad
Apr 2009

Ändra bara $file till $outFile???

Alternativt bara $file = $outfile

Trädvy Permalänk
Webbutvecklare
Moderator
Plats
::1
Registrerad
Dec 2002
Skrivet av kevvs:

Hur gör jag? Tips?

Du säger att uploadImage() anropar getimagesize($file['tmp_name']) internt så den är beroende av en array i formatet från $_FILES för att fungera. Antagligen räcker det inte med att skapa en ny sådan array eftersom att den även borde kontrollera om uppgifterna går att associera till en uppladdad fil.

Eventuellt skulle du kunna arbeta runt det det genom att skriva över den ursprungliga filen ($imagick->writeImage($_FILES["fileToUpload"]["tmp_name"]); $values = uploadImage($_FILES["fileToUpload"], ...);, men en korrektare lösning vore att dela upp uploadImage() i flera mindre funktioner för att helt bli av med beroendet av $_FILES i de fall det inte är nödvändigt.

Abstractions all the way down.

Trädvy Permalänk
Medlem
Plats
Landskrona
Registrerad
Nov 2008

Hallå igen!

Det slutade med att jag fångar upp filen efter att den laddats upp via ett formulär och skickar den vidare till uploadFile() med:

if ($_FILES['fileToUpload']['name'] != '') { $fileValues = uploadFile($_FILES['fileToUpload'], $_POST['isPublic'], $aList, $id, $_POST['convertToPoster'], $_POST['posterType'], $_POST['folderID']); }

och sedan filtrerar uploadFile() filen på filtyp och om filtypen är pdf så konverteras pdf till jpg i uploadFile() och istället för att försöka skicka den genererade jpg-filen vidare till funktionen uploadImage() så skrevs en ny egen funktion för att flytta filen till rätt destination och lägga in information om filnamn, storlek, målmapp o.s.v. i databasen. Den nya funktionen gäller enbart pdf-filer, övriga godkända filformat skickas vidare till uploadImage().

Det var inte så svårt som jag trodde, all logik fanns i funktionen uploadImage() så jag behövde inte uppfinna hjulet helt från början.

Edit: Problemet var alltså att jag efter imagicks konvertering var tvungen att spara den nya genererade filen på serverns hårddisk eller minne, då kunde jag inte läsa tillbaka filen till $_FILES (där filen ursprungligen fanns efter att ha laddats upp via formuläret i upload.php). Funktionen uploadImage() kollade enbart efter filer i $_FILES för att flytta filen till rätt destination och lägga in information om filnamn, storlek, målmapp o.s.v. i databasen.