Nette práce se souborama přes více stránek

kiCkZ
Člen | 153
+
0
-

Zdravim,

chci se zeptat, jak řešíte upload souborů skrz více stránek.
Mam formulář a po odeslání si ukládám FileUpload do session, ale jakmile chci soubor přes funkci move dát do složky, tak dostanu chybu viz níže:

Unable to move uploaded file ‚C:\xampp\tmp\phpD028.tmp‘ to ‚C:\xampp\htdocs\ucto\app/files/case/attachments/33/file.pdf‘. Systém nemůže nalézt uvedený soubor. (code: 2)

<?php
    public function uploadBusinessCaseAttachment($file, $businessCaseId)
    {
        $path = $this->dir . '/case/attachments/' . $businessCaseId;
        $file_path = $path . '/' . $file->getSanitizedName();


        if ($file->isOk()) {
            if (file_exists($path)) {
//                FileSystem::delete($path . '/' . $form['upload']->getOption('description'));
                $file->move($file_path);
            } else {
                mkdir($path);
                $file->move($file_path);
            }
        }
    }
?>

Editoval kiCkZ (11. 4. 2018 20:45)

Pavel Kravčík
Člen | 1196
+
0
-

Co máš v $this->dir? Máš tam nějakou cestu z DI?

kiCkZ
Člen | 153
+
0
-

Pavel Kravčík napsal(a):

Co máš v $this->dir? Máš tam nějakou cestu z DI?

Tam je přímo skrz config daná cesta:

‚%appDir%/files‘

kiCkZ
Člen | 153
+
0
-

Pavel Kravčík napsal(a):

Co máš v $this->dir? Máš tam nějakou cestu z DI?

Zjistil jsem, že pokud soubor přetáhnu do složky ihned po spracování formuláře, tak se soubor nahraje v pořádku, ale problém je, že v té době ještě nemam ID toho případu, které pak vytváří identifikační složku.

Tak jsem zkusil udělat nejdříve po zpracování formuláře přesun souboru do temp/attachments, ale pokud chci následně soubor přesunout do správné složky, tak mi to nejde a napíše mi to toto:

Unable to copy file ‚C:\xampp\htdocs\ucto\app/../temp/attachments/123123123.pdf‘ to ‚C:\xampp\htdocs\ucto\app/files/case/attachments/23/‘

Pavel Kravčík
Člen | 1196
+
0
-

Hádám, že ten upload to hodí do dočasného souboru a s koncem skriptu to čistí, proto to musíš asi dělat hned (http://php.net/…temp-dir.php). Jinak ten tvůj postup je dobrý. Nevyčistil si mezitím cache? Ten soubor se Ti v temp/attachments/ objevil?

kiCkZ
Člen | 153
+
0
-

Pavel Kravčík napsal(a):

Hádám, že ten upload to hodí do dočasného souboru a s koncem skriptu to čistí, proto to musíš asi dělat hned (http://php.net/…temp-dir.php). Jinak ten tvůj postup je dobrý. Nevyčistil si mezitím cache? Ten soubor se Ti v temp/attachments/ objevil?

Tak už jsem to vyřešil, tímto způsobem:

Uvědomil jsem si, že se vlastně jen proměnná $file, která je obalená třídou FileUpload změnila cesta, takže s ní mohu pracovat jako předtím, takže chyba byla tam:

<?php
   public function uploadBusinessCaseAttachment($file, $businessCaseId)
    {
	$path = $this->dir . '/case/attachments/' . $businessCaseId .'/';
	$file_path = $path . '/' . $file->getSanitizedName();
	$temp_file = $this->tempDir . '/attachments/' . $file->getSanitizedName();

	if ($file->isOk()) {
            if (file_exists($path)) {
		FileSystem::delete($path . '/' . $form['upload']->getOption('description'));
                $file->move($file_path);
            } else {
                mkdir($path);
		$file->move($file_path);
		FileSystem::delete($temp_file);
            }
        }
    }
?>

Editoval kiCkZ (12. 4. 2018 9:31)