Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

11
respostas

Diretório default Storage

Pessoal estou com uma dúvida de como alterar o diretório padrão do Storage do Laravel.

Meu código ficou assim, gostaria que as imagens fossem salvas na pasta public. O meu laravel joguei no FTP então a pasta com os arquivos do laravel esta no ftp assim no /laravel (arquivos do laravel) public/senge/ (pasta public do laravel).

Grato.

  if (Input::file('photo'))
            {
                File::move($photo,storage_path().'/imagem-photo/avatar_'.$usuario->id.'.'.$extensao);
                $usuario->photo = storage_path().'/imagem-photo/avatar_'.$usuario->id.'.'.$extensao;
                $usuario->save();
            }
11 respostas

Oi Leando, tudo bom?

Tenta definir no seu arquivo .env algo como:

APP_STORAGE=seu/caminho/aqui

Apenas tome cuidado ao alterar esse tipo de informação no framework pois o proprio framework pode usa-lo para algo e a gente pode acabar afetando funcionalidades relacionadas a ele =)

Qualquer problema é só falar.

Abraço

Olá André, tudo blz!

olha só alterei o .env mas continua salvando no mesmo diretório.

Tem algo por minha versão ser a 5.0?

Tenta no bootstrap/app.php, algo como:

# base_path() -> devolve a raiz do projeto
$path_storage = base_path() . "seu/diretorio/aqui";

$app->useStoragePath($path_storage);

Tentei devolvei esse erro:

ErrorException in Filesystem.php line 75:
file_put_contents(/00d4ae7e25b4400922dbe33acd37d9d0): failed to open stream: Permission denied

O arquivo está salvando na pasta e mandando o link de acesso a imagem na tabela do usuário, fica assim na tabela:

Comprovante:

/home/ondesign/laravel/storage/imagem-comprovante/comprovante_79.png

Essa pasta /home/ondesign seria raiz do FTP é está inacessível, por isso gostaria que os arquivos fossem salvos em uma pasta pública.

Na view:

        <td><img src="{!! url($u->comprovante) !!}"></td>

No html da view.

<img src="http://www.ondesigner.com.br/senge/home/ondesign/laravel/storage/imagem-comprovante/comprovante_75.png">

Você pode tentar utilizar o diretorio da pasta public. Ela, normalmente, é publica no sistema operacional. A função:

public_path('/imagem-photo/avatar_'.$usuario->id.'.'.$extensao);

Retorna uma string com o diretorio da pasta public contacatenado com /imagem-photo/avatar_usuarioId.extensao =)

Amigo, retornou esse erro:

Precisava que fosse para o diretório do public_html

ErrorException in Filesystem.php line 146:
rename(/tmp/phpRP0ZX3,/home/ondesign/laravel/public//imagem-photo/avatar_87.jpg): No such file or directory

Acredito que um possivel problema esteja na / a mais aqui na url:

/tmp/phpRP0ZX3,/home/ondesign/laravel/public//imagem-photo/avatar_87.jpg

Tenta remover a primeira / no caminho:

public_path('imagem-photo/avatar_'.$usuario->id.'.'.$extensao);

Está dando erro, só para entender, como fiz a instalação, peguei na web kkkk.

/laravel <- pasta instalação

/public_html/senge/ <-pasta onde esta o public do laravel.

Será que melhor colocar a pasta do laravel no public? Não tem problema de segurança?

rename(/tmp/phprjCaQY,/home/ondesign/laravel/public/imagem-photo/avatar_88.jpg): No such file or directory

Alguém poderia dar um help? Ainda estou com dificuldades em recuperar a imagem salva no diretório.

O arquivo está salvando na pasta e mandando o link de acesso a imagem na tabela do usuário, fica assim na tabela:

Comprovante:

/home/ondesign/laravel/storage/imagem-comprovante/comprovante_79.png

Essa pasta /home/ondesign seria raiz do FTP é está inacessível, por isso gostaria que os arquivos fossem salvos em uma pasta pública.

Na view:

No html da view.

Oi Leandro, tudo bom?

Se a pasta Home está sem permissão, você pode voltar mais diretorios. Cada ../ no seu diretorio volta um. Se você quer voltar antes da pasta Home, você precisaria voltar umas 3 vezes o diretorio. Algo como:

base_path()."../../../"

Já que base_path é o diretorio /home/ondesign/laravel/, isso faria você voltar antes da pasta home.

Entretanto, é estranho você não ter essa permissão. Seria interessante você ver com alguém uma forma de liberar essa pasta pelo menos para alteração.

Adicionar a pasta do laravel no ambiente publico pode ser um poblema dependendo de onde você hospeda seu sistema. O ideal mesmo é você ter acesso ao ssh desse servidor para poder alterar as permissoes dos ambientes publicos do framework apenas.

Perdão pela demora no retorno.

Abraço =)