Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wellington09

upload multiplo

Recommended Posts

Estou com uma dúvida em relação a upload de varias imagens.

Geralmente muitos sites de cadastro de imoveis utilizam o cadastro de fotos da seguinte forma.

Preenchemos todos os dados dos imoveis e carregamos as imagens no input file, ao clicar no botão submit o registro é salvo no banco junto com o endereço das imagens e o upload é feito dentro da pasta especifica, ou seja, tudo é executado após o click no botão submit.

Porem vi um sistema e estou com uma duvida da seguinte forma como o upload é executado.

Antes mesmo de cadastrar um imóvel o usuário faz o upload das imagens através do input file multiple e as imagens são recortadas e carregadas no servidor mesmo antes do usuário clicar em submit, até ai blz, sei que o mesmo deve ter utilizado o onchange e enviado via javascript/jQuery.

Pois logo após o campo upload as imagens utilizadas já aparecem carregadas abaixo logo abaixo.

OBS:

As imagens são recortadas realmente e não redimensionadas com o atributo width da tag <img.

Fiz o favor de verificar fazendo um download das imagens carregadas, para tirar a dúvida :D até pq carregar uma imagem via HTML5 hoje e mostrar a mesma logo abaixo sem envia-la para o servidor é algo fácil, a diferença é que neste caso o sistema que eu estava testando as imagens realmente foram enviadas para o servidor.

Fiquei me perguntando se o caminho das imagens ficou registrado no banco ou se estava na sessão, pois o usuário precisava dar um submit para dizer que tau imóvel utiliza tau imagens, ou seja como fica o relacionamento na base de dados, pois o imóvel não foi cadastrado ainda e as imagens não pertencem a imóvel algum.

Bom, sei que mesmo que as imagens não pertença a imóvel algum, eu poderia cadastrar um imóvel normalmente e através de uma edição deste imóvel, dizer que tau imagem (talvez por um checkbox) que esta na "base de dados" ou em tau pasta agora ira pertencer ao imóvel que eu estou editando.

Porem este não é o caso do sistema que eu estava testando, pois não existia esta opção.

Eu teria que editar o imóvel e carregar as imagens novamente que estão no meu pc, porem o que aconteceu com as imgens que eu ja tinha enviado antes ? ficaram perdidas em uma pasta no servidor, ocupando espaço em disco ? e se o caminho delas foram salvas na base de dados estão la de bobeira ?

Minha outra duvida é, e se o usuário carregar 5 imagens no campo upload e depois optar por sair do sistema sem salvar o imóvel, o que aconteceria com essas 5 imagens carregadas ? ficariam de bobeira na pasta upload sem ser utilizada, ja que a mesma parece estar sendo salva ou não na base de dados

Alguem ja fez algo do tipo, poderia me informar se o que estou imaginando estaria correto ?

Achei legal a forma de carregar a imagem e ja enviar para o servidor, pois assim da tempo para o usuário ir preenchendo os campos enquanto o upload é executado, porem minha duvida fica em relação ao relacionamento dessas imagens com o imóvel e o que fazer para que as imagens não fiquem de bobeira no servidor no caso do cliente sair do sistema.

Talvez utilizar uma cron ? limpando os registro das imagens que não tem relacionamento com nenhum imóvel na base de dados e exclui-las depois da pasta ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em poucas linhas, você terá que tratar todas as opções.

O que é recomendado:

  • Salve as imagens em uma pasta temporária, mas você precisa realmente movê-las para lá (move_uploaded_file);
  • Salve o nome da imagem no HTML, como um campo input hidden. Esse campo será enviado no submit;
  • Quando realizar o submit, mova as imagens (agora é com rename, sim, rename é pra mover também) e salve o relacionamento no SGBD;
  • Realize algum processo para excluir as imagens que estão pasta temporária, seja uma cron, ou a cada vez que o seu sistema ser acessado. Importante, faça uma validação com tempo (se a imagem tem mais de N horas no servidor).

Existem outros modos, que o upload da imagem é realizado e, após, você seleciona a imagem para ser utilizada no cadastro. Assim as imagens podem ser compartilhadas.

Outro ponto, se você não excluir a imagem, ela sempre estará lá.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel, valeu pela dica, vou brincar um pouco aqui com o código.

A questão de selecionar a imagem e carregar no cadastro é a questão de abrir um "explorer" neh e selecionar as imagens que eu quero.

Só tire uma ultima dúvida, já que vou trabalhar com multiplo upload como faço para contornar a questão de limite máximo de upload no servidor ?

Não teria algo diferente do tipo, após terminar um upload passe para o próximo arquivo e faça o upload, ao invés de eu mudar o max post_max_size e upload_max_filesize no htaccess ou php.ini

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não teria algo diferente do tipo, após terminar um upload passe para o próximo arquivo e faça o upload, ao invés de eu mudar o max post_max_size e upload_max_filesize no htaccess ou php.ini

Você pode fazer essas validações no proprio jquery, de uma olhada!

http://stackoverflow.com/questions/1601455/how-to-check-file-input-size-with-jquery

Claro que as validações do servidor tem que ser feitas também. Mas só de validar o tamanho do arquivos no Browser, evita recursos do servidor.

Já fiz algo parecido pra produtos, ao subir as imagens, entra na tabela de produtos como rascunho para pegar o ID, caso o usuario desista ele estara na lista com produto-rascunho-data-hora-minuto-segundo, assim pego o ID para usar para imagens. caso de um refresh estara la na lista, detalhe que eu usava uma SKU gerada automaticamente, que também era enviada junto com as imagens.

Detalhe:

Para usar id guardo em uma sessão a SKU e ID AutoIncrement, não sei se era a melhor opção, mas na época é uma forma de garantir a integridade do banco.

Mas a ideia do Gabriel é top!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Williams Duarte, a questão do jQuery pra mim não resolve, pois estou pensando em fazer algo mais automatizado, assim que upload for feito o PHP já recorta a imagem, a unica coisa que estou querendo automatizar é a questão de upload no fila de espera.

Mas vale pela dica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Williams Duarte, a questão do jQuery pra mim não resolve

Cara fica difícil quando não se tem conhecimento sobre a biblioteca Jquery além do básico. O que eu disse é que todo o processo de validações de carga de arquivos, extensões etc. Pode ser feita por ela inicialmente, ou outras se preferir "Javascript", evitando processo desnecessário do servidor. para evitar algo como o pedido abaixo:

Não teria algo diferente do tipo, após terminar um upload passe para o próximo arquivo e faça o upload, ao invés de eu mudar o max post_max_size e upload_max_filesize no htaccess ou php.ini

a unica coisa que estou querendo automatizar é a questão de upload no fila de espera.

E quem é responsável por enviar a fila? Não seria o Javascript? PHP é somente responsável pelo tratamento da requisição. Se alguma coisa está fora dos padrões ai sim devolve para o cliente corrigir.

Vamos supor que um usuário envie 10 imagens de 10mb cada e fora das extensões aceita. Você vai esperar enviar para o servidor 100mb, para depois ai sim validar e retornar o erro ao usuário?

E se tiver 10 usuários ou mais fazendo a mesma coisa simultaneamente? Taí um gargalo meio tenso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem razão sim, eu que me expressei mau, até pq não estava pensando em utilizar o jQuery para isso, de inicio era só o PHP mesmo, por isso disse que o jQuery não resolveria a questão, mas a "melhor forma de resolver" é com jQuery mesmo neste momento, usando o submit via ajax.

Verdade não tinha parado para pensar na questão simultânea, apesar de ser aplicações simples e de pouco acesso nada melhor do que pensar la na frente neh, nunca sabemos aonde o "sucesso" da aplicação vai chegar, evitando dores de cabeça futura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rapaz isso já tem até pronto, fazer isso diretamente no php é voltar a 10 anos atrás!

Segue, só estudar

https://blueimp.github.io/jQuery-File-Upload/

Demo Notes
  • The maximum file size for uploads in this demo is 999 KB (default file size is unlimited).
  • Only image files (JPG, GIF, PNG) are allowed in this demo (by default there is no file type restriction).
  • Uploaded files will be deleted automatically after 5 minutes or less (demo files are stored in memory).
  • You can drag & drop files from your desktop on this webpage (see Browser support).
  • Please refer to the project website and documentation for more information.
  • Built with the Bootstrap CSS framework and Icons from Glyphicons.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.