10
respostas

Enviar imagem (png, jpg) para a pasta ftp e registrar no banco

Pessoal, preciso fazer um upload de fotos para ftp e banco de dados:

Alguém tem um exemplo? Gostaria de salvar em uma pasta especifica no FTP.

            <div class="form-group">
                <label>Foto 3x4</label>
                <input type="file" name="photo" class="form-control">
            </div>
10 respostas

Oi Leandro. Você deseja enviar um arquivo usando FTP após upload para um outro servidor?

Opá, seria o básico, estou com a aplicação hospedada veja: http://www.ondesigner.com.br/senge/

Ai gostaria que usuário enviasse o arquivo e ficasse disponível em uma pasta no ftp por exemplo senge/imagem

Ah sim, no caso você quer que a imagem seja armazenada no próprio servidor? O Laravel já tem essa funcionalidade facilitada. Está na documentação:

https://laravel.com/docs/5.5/filesystem

Dê uma lida nesse link, tente configurar o config/filesystem.php, e seguindo o passo a passo você consegue salvar em poucas linhas.

Qualquer dúvida nos avise.

Amigão, usei o exemplo que você passou, assim. Ele salvou na pasta padrão storage/app um arquivo avatars

e na tabela photo no banco de dados: /tmp/phpE3mFcU

O nome do input é photo, onde estou errado? Gostaria de salvar e tambem no banco o nome do arquivo para poder depois recuperar ele em um List. Não sei se isso é o padrão.

  public function adiciona(UsuarioRequest $request){
        Storage::put(
            'avatars/'.$request->id,
            file_get_contents($request->file('photo')->getRealPath())
        );
        //$request->data_nascimento = \DateTime:: createFromFormat ('d/m/Y', $request->data_nascimento)->format('Y-m-d');
        Usuario::create($request->all());

Acho que no seu caso seria melhor usar outra abordagem ao criar o model. Em vez de Usuario::create($request->all()), faça assim:

$usuario = new Usuario;
$usuario->nome = $request->nome;
$usuario->cidade = $request->cidade:
//Etc...
$usuario->avatar = 'avatar/' . $request->id;
$usuario->save();

Amigo show de bola, conseguimos avançar e um ponto, agora a formatação da data caiu na tabela perfeitamente. Só a questão do salvar o arquivo que não está indo:

<form action="{{ asset('usuarios/adiciona') }}" method="post" enctype="multipart/form-data">

 <input type="file" name="photo" class="form-control">

Função

     $request->data_nascimento = \DateTime:: createFromFormat ('d/m/Y', $request->data_nascimento)->format('Y-m-d');
        $usuario = new Usuario;
        $usuario->nome = $request->nome;
        $usuario->cidade = $request->cidade;
        $usuario->data_nascimento = $request->data_nascimento;
        $usuario->photo = '$photo' . $request->id;
        $usuario->save();
        return redirect ('/usuarios')->withInput();

Leandro, o arquivo em si está sendo salvo? Se está, está sendo salvo onde? (Confira dentro da pasta storage). Se está sendo salvo, você deve checar se está acessível via URL. Se não estiver, rode esse comando:

php artisan storage:link

Ele cria um link para o storage a partir de public, tornando os arquivos acessíveis.

Tomás, então o arquivo não está indo para o Storage/app. Fui efetuar o comando php artisan storage:link e retornou um erro:

[InvalidArgumentException]
There are no commands defined in the "storage" namespace

Lembrando que a versão que utilizo do laravel é a 5.0

Segue Controller completo:

<?php namespace senge\Http\Controllers;
use senge\Http\Controllers\Controller;
use Illuminate\Contracts\Filesystem\Factory;
use Illuminate\Support\Facades\DB;
use Storage;
use Request;
use Validator;
use senge\Usuario;
use senge\Campu;
use senge\Ensino;
use senge\Curso;
use senge\Http\Requests\UsuarioRequest;

class UsuarioController extends Controller {


        public function __construct()
    {
      //se quiser travar o acesso apenas para o adiciona e o remove
      //$this->middleware('auth', ['only' => ['adiciona', 'remove']]);
      $this->middleware('auth', ['only' => ['lista', 'mostra', 'formrestrito', 'remove']]);
    }


       public function lista(){
         $usuarios = Usuario::all();
        return view('/usuario.listagem')->with('usuarios', $usuarios);

   }

    public function mostra($id){
        $usuario = Usuario::find($id);
        return view('/produto.detalhes')->with('u', $usuario);
    }

    public function novo(){
        $campus = Campu::all();
        $ensinos   = Ensino::all();
        $cursos   = Curso::all();
        return view('/usuario.formulario')->with(compact('campus', 'ensinos', 'cursos'));
    }

     public function formrestrito(){
        $campus = Campu::all();
        $ensinos   = Ensino::all();
        $cursos   = Curso::all();
        return view('/usuario.formrestrito')->with(compact('campus', 'ensinos', 'cursos'));
    }
        public function adicionarestrito(UsuarioRequest $request){
        $request->data_nascimento = \DateTime:: createFromFormat ('d/m/Y', $request->data_nascimento)->format('Y-m-d');
       // Usuario::create($request->all()); 
        $usuario = new Usuario;
        $usuario->nome = $request->nome;
        $usuario->email = $request->email;
        $usuario->cpf = $request->cpf;
        $usuario->rg = $request->rg;
        $usuario->data_nascimento = $request->data_nascimento;
        $usuario->sexo = $request->sexo;
        $usuario->telefone = $request->telefone;
        $usuario->celular = $request->celular;
        $usuario->cep = $request->cep;
        $usuario->rua = $request->rua;
        $usuario->numero = $request->numero;
        $usuario->complemento = $request->complemento;
        $usuario->bairro = $request->bairro;
        $usuario->cidade = $request->cidade;
        $usuario->uf = $request->uf;
        $usuario->campu_id = $request->campu_id;
        $usuario->curso_id = $request->curso_id;
        $usuario->ensino_id = $request->ensino_id;

        $usuario->photo = '$photo' . $request->photo;
        $usuario->save();
        return redirect ()->action('UsuarioController@formrestrito');
    }

       public function adiciona(UsuarioRequest $request){
       // Storage::put(
        //    'avatars/'.$request->id,
         //   file_get_contents($request->file('photo')->getRealPath())
        // );
        $request->data_nascimento = \DateTime:: createFromFormat ('d/m/Y', $request->data_nascimento)->format('Y-m-d');
       // Usuario::create($request->all()); 
        $usuario = new Usuario;
        $usuario->nome = $request->nome;
        $usuario->email = $request->email;
        $usuario->cpf = $request->cpf;
        $usuario->rg = $request->rg;
        $usuario->data_nascimento = $request->data_nascimento;
        $usuario->sexo = $request->sexo;
        $usuario->telefone = $request->telefone;
        $usuario->celular = $request->celular;
        $usuario->cep = $request->cep;
        $usuario->rua = $request->rua;
        $usuario->numero = $request->numero;
        $usuario->complemento = $request->complemento;
        $usuario->bairro = $request->bairro;
        $usuario->cidade = $request->cidade;
        $usuario->uf = $request->uf;
        $usuario->campu_id = $request->campu_id;
        $usuario->curso_id = $request->curso_id;
        $usuario->ensino_id = $request->ensino_id;

        $usuario->photo = 'arquivo.jpg' . $request->id;
        $usuario->save();
        return redirect ('/usuarios')->withInput();
    }


    public function remove($id){
        $usuario = Usuario::find($id);
        $usuario->delete();
        //redirecionamento de url mas indo para o método!
        return redirect()->action('UsuarioController@lista');
        //return redirect('/produtos');
    }


}

Amigo, fiz um exemplo que peguei na web, e parece que esta melhor. Olha como ficou o controller:

       public function adiciona(UsuarioRequest $request){

        if (Input::file('photo'))
            {
                $photo = Input::file('photo');
                $extensao = $photo->getClientOriginalExtension();
                if($extensao != 'jpg' && $extensao !='png')
                {
                    return back()->whith('erro-photo', 'O arquivo precisa ser uma imagem!');
                }
            }

       // Storage::put(
        //    'avatars/'.$request->id,
         //   file_get_contents($request->file('photo')->getRealPath())
        // );
        $request->data_nascimento = \DateTime:: createFromFormat ('d/m/Y', $request->data_nascimento)->format('Y-m-d');
       // Usuario::create($request->all()); 
        $usuario = new Usuario;
        $usuario->nome = $request->nome;
        $usuario->email = $request->email;
        $usuario->cpf = $request->cpf;
        $usuario->rg = $request->rg;
        $usuario->data_nascimento = $request->data_nascimento;
        $usuario->sexo = $request->sexo;
        $usuario->telefone = $request->telefone;
        $usuario->celular = $request->celular;
        $usuario->cep = $request->cep;
        $usuario->rua = $request->rua;
        $usuario->numero = $request->numero;
        $usuario->complemento = $request->complemento;
        $usuario->bairro = $request->bairro;
        $usuario->cidade = $request->cidade;
        $usuario->uf = $request->uf;
        $usuario->campu_id = $request->campu_id;
        $usuario->curso_id = $request->curso_id;
        $usuario->ensino_id = $request->ensino_id;
        $usuario->photo = "";

        $usuario->save();
        if (Input::file('photo'))
            {
                File::move($photo,public_path().'/imagem-photo/avatar_'.$usuario->id.'.'.$extensao);
                $usuario->photo = public_path().'/imagem-photo/avatar_'.$usuario->id.'.'.$extensao;
                $usuario->save();
            }
        return redirect ('/usuarios')->withInput();
    }

Mas está ainda retornando um erro:

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

Não sei como altero a pasta de salvamento.

Olá, consegui fazer um que está salvando o arquivo na pasta e também levando o diretorio para o banco:


        if (Input::file('photo'))
            {
                $photo = Input::file('photo');
                $extensao = $photo->getClientOriginalExtension();
                if($extensao != 'jpg' && $extensao !='png')
                {
                    return back()->whith('erro-photo', 'O arquivo precisa ser uma imagem!');
                }
            }

       // Storage::put(
        //    'avatars/'.$request->id,
         //   file_get_contents($request->file('photo')->getRealPath())
        // );
        $request->data_nascimento = \DateTime:: createFromFormat ('d/m/Y', $request->data_nascimento)->format('Y-m-d');
       // Usuario::create($request->all()); 
        $usuario = new Usuario;
        $usuario->nome = $request->nome;
        $usuario->email = $request->email;
        $usuario->cpf = $request->cpf;
        $usuario->rg = $request->rg;
        $usuario->data_nascimento = $request->data_nascimento;
        $usuario->sexo = $request->sexo;
        $usuario->telefone = $request->telefone;
        $usuario->celular = $request->celular;
        $usuario->cep = $request->cep;
        $usuario->rua = $request->rua;
        $usuario->numero = $request->numero;
        $usuario->complemento = $request->complemento;
        $usuario->bairro = $request->bairro;
        $usuario->cidade = $request->cidade;
        $usuario->uf = $request->uf;
        $usuario->campu_id = $request->campu_id;
        $usuario->curso_id = $request->curso_id;
        $usuario->ensino_id = $request->ensino_id;
        $usuario->photo = "";

        $usuario->save();
        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();
            }

Mas gostaria que os arquivos fossem salvos na pasta public/senge/imagem-photo/

E como faço para exibir a photo na view?

Esta indo assim para coluna photo:

/home/ondesign/laravel/storage/imagem-photo/avatar_66.png

66 é o id do usuario.