Problém s nahráním obrázku jpg některé nahrá a některé ne

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
parti
Člen | 117
+
0
-

Dobrý dne prosím o radu můj problém je ten že mi některé obrázky (.jpg) v adminovy nechce nahrat. Nekteré obrázky jpg. nahraje a některé ne a velikosti to není pořád mají méně než 5MB. Prosím o radu nevíte čím to je ?

Presenter

namespace App\AdminModule\Presenter;

use Nette\Application\UI\Form;
use App\Model\ImageStorage;
use Nette\Utils\FileSystem;
use Nette\Utils\Image;

/**
 * Description of PhotosPresenter
 *
 * @author parti
 */
class PhotosPresenter extends SecurePresenter {

    /**
     *
     * @var \App\Model\PhotoManager
     */
    private $photoManager;

    public function __construct(\App\Model\PhotoManager $pm) {
        parent::__construct();

        $this->photoManager = $pm;
    }

    /**
     * vypisujeme galerie
     */
    public function actionGalleries() {

        $this->template->galleries = $this->photoManager->getGalleries();
    }

    /**
     *
     * @param int $id
     */
    public function actionGallery($id = NULL) {
        $row = $this->photoManager->getGallery($id)->fetch();

        $defaults = [];
        $defaults['title'] = $row['nazev'];
        $defaults['description'] = $row['popis'];
        $defaults['types'] = $row['typ'];
        $defaults['id'] = $row['id'];

        $this['galleryForm']->setDefaults($defaults);

        $this->template->photos = $this->photoManager->getPhotos($row['id']);
    }

    public function createComponentGalleryForm() {
        $form = new Form;

        $types = [];
        $types['svatba'] = 'Svatby';
        $types['prilezitost'] = 'K Přilezitosti';
        $types['pohreb'] = 'Pohřby';

        $form->addSelect('types', NULL, $types)
                ->setPrompt(' - - zvolte typ')
                ->setRequired('Zvolte prosim typ');
        $form->addText('title')
                ->setRequired('Zvolte nazev fotogalerie');
        $form->addTextArea('description');

        $form->addUpload('photos', NULL, TRUE)
                ->addRule(Form::IMAGE, 'Zvolte obrázek typu JPEG, PNG nebo GIF')
                ->addRule(Form::MAX_FILE_SIZE, 'Obrázek je moc veliký ma 5MB', 5 * 1000 * 1024);

        $form->addSubmit('save');
        $form->onSuccess[] = array($this, 'galleryFormSubmitted');
        $form->addHidden('id');
        return $form;
    }

    public function galleryFormSubmitted(Form $form){
        $values = $form->values;
        // ulozime zaznam o galerii a teprve pak nahrajeme fotky
        $data = [];
        $data['typ'] = $values['types'];
        $data['nazev'] = $values['title'];
        $data['popis'] = $values['description'];

        $data['casVytvoreni'] = new \Nette\Utils\DateTime;

        $galleryId = $this->photoManager->saveGallery($data, $values['id']);


        // vytvorime adresar a podadresar (podle aktualniho data)
        $now = new \Nette\Utils\DateTime;
        $year = $now->format('Y');
        $month = $now->format('m');

        $folder = 'fotky/' . $year . '/' . $month;
        FileSystem::createDir($folder);

        // projdeme nahravane soubory fotek
        foreach ($values['photos'] as $photo) {

            // upravime fotku podle sve vule
            $image = $photo->toImage();
            $image->resize(800, NULL, Image::SHRINK_ONLY);
            // ulozime do spravneho adresare

            $image->save($folder . '/' . $photo->sanitizedName);
            // ulozime do DB
            $data = [];
            $data ['rok'] = $year;
            $data ['mesic'] = $month;
            $data['soubor'] = $photo->sanitizedName;
            $data ['galerie_id'] = $galleryId;
            $this->photoManager->createImage($data);
        }
        // mazat vybrane fotky
        $deletePhotos = isset($form->getHttpData()['deletePhotos']) ? $form->getHttpData()['deletePhotos'] : [];
        $this->photoManager->deletePhotos($deletePhotos);

        $this->flashMessage('OK', 'success');
        $this->redirect('this');
        exit;
    }
<form n:name=galleryForm>
        <p>
            <label class="control-label" >Zvolte typ</label>
            <select n:name=types class="form-control"></select>
        </p>
        <p>
            <label class="control-label" >Nazev</label>
             <input n:name=title class="form-control">
        </p>
        <p>
            <label class="control-label" >Text</label>
            <textarea n:name=description class="form-control"> </textarea>
        </p>
        <p n:if=$photos>

            {foreach $photos as $photo}
            <div class="img-thumbnail">

                <img src="{$basePath . '/fotky/' . $photo->rok . '/' . $photo->mesic . '/' . $photo->soubor}"  width="150" />
                <br />
            <label>smazat <input type="checkbox" name="deletePhotos[]" value="{$photo->id}" /></label>
            </div>


            {/foreach}
        </p>
        <p>
            <input n:name=photos />
        </p>
          <p>
              <input n:name=save class="btn btn-success" value="ulozit">
               <a class="btn  btn-primary" n:href="Photos:galleries">Zpet na výpis gallerie</a>
          </p>
         <input n:name=id>


    </form>

Dekuji za radu a pomoc

CZechBoY
Člen | 3608
+
0
-

Jakou dostaneš chybu?
http://php.net/…d.errors.php

Případně kam až se dostaneš při zpracování souboru?

Editoval CZechBoY (26. 12. 2016 22:41)

Oli
Člen | 1215
+
0
-

Co mě takhle napadá setkal jsem se se 2 „divnými“ důvody:

  1. koncovka (pokud s ní pracuješ a předpokládáš .jpg) může být i .JPG
  2. Velikost souboru – stalo se mě (moc tomu nerozumím) že obrázek měl pár mega (do 8MB myslím), ale byl nějak progresivně komprimovanej a po načtení do Image měl přes 50 MB (nebo tak nějak).
Gappa
Nette Blogger | 209
+
0
-

Oli napsal(a):

  1. Velikost souboru – stalo se mě (moc tomu nerozumím) že obrázek měl pár mega (do 8MB myslím), ale byl nějak progresivně komprimovanej a po načtení do Image měl přes 50 MB (nebo tak nějak).

Podstatnou věcí při zpracování obrázku není jeho datová velikost, ale rozlišení, protože to určuje paměťovou náročnost.

Obrázek vyplněný jen jednou barvou a rozlišením 5000×5000 bude mít podstatně menší datovou velikost než reálná fotka takového rozlišení – prostě jde lépe (ztrátově, v případě jpg) zkomprimovat.

parti
Člen | 117
+
0
-

CZechBoY : chybu mi to práveže nevyhodí žádnou prostě se akce neprovede a obrázek se neuloží. Pokud je obrázek vetší než 5MB tak mi vybehne informační okno že velikost obrázku přesáhla hranici 5MB.

Oli: no obrázky které mohu náhrat tak maji koncoku .JPG a stejne i obrázek který nahrát nemohu má koncovku .JPG kliden vám je zašlu někam.Pokud se na ty obrázky budete chtít podívat.. Ja jsem předpokládal jestli nemám nějakou chybu v kodu.Ale zase na druhou stranu mi to nekteré obrákzky typu .JPG uloží.

Vyzkoušel jsem to pro jistotu znovu a pořád stejný výsledek jeden .JPG uloží a druhý .JPG neuloží.
I když to mám uložené jako .jpg tak mi to ten obrázke neuloží.
Děkuji za odpoved

Editoval parti (27. 12. 2016 15:13)

parti
Člen | 117
+
0
-

**Řešení: **
problem byl na straně servru byla tam nastavena hodnota uploud image jen na 2MB. Takže je to potřeba změnit nastavení na straně apache.