Nette práce se souborama přes více stránek
- kiCkZ
- Člen | 153
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)
- kiCkZ
- Člen | 153
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
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
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)