| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/06/2011 11:21:03
|
Lucas Emanuel
GUJ Master
Membro desde: 09/08/2009 23:48:57
Mensagens: 1143
Localização: Heap
Offline
|
Olá. Hoje sabemos como está fácil realizar upload de arquivos. No entanto, tenho algumas dúvidas quanto a:
1 - Nome do Arquivo. Qual nome voce dá ao arquivo em upload?
2 - Se o upload (ex. da foto) estiver junto com a regra de cadastro, voce separa os códigos de cadastro e o código de upload?
3 - Se for uma imagem, por exemplo, voce define um tamanho máximo de arquivo, bloqueando, ou voce manipula o arquivo para gerar uma espécie de Thumbnail?
4 - Voce usa alguma biblioteca JS para realizar upload? (Tipo Uploadify, ajax uploader), ou vai no jeito tradicional?
This message was edited 1 time. Last update was at 19/06/2011 11:38:36
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/06/2011 18:27:26
|
leandronsp
Virtual Machine Man
![[Avatar]](/images/avatar/b0dfd1bbadca4092f9d14d7a74085df0.jpg)
Membro desde: 22/03/2008 22:24:29
Mensagens: 520
Localização: São Paulo
Offline
|
Lucas Emanuel wrote:1 - Nome do Arquivo. Qual nome voce dá ao arquivo em upload?
Pra mim isso não faz diferença
2 - Se o upload (ex. da foto) estiver junto com a regra de cadastro, voce separa os códigos de cadastro e o código de upload?
Não. Apenas especifico no form que tem um "carinha" multipart junto com a galera
3 - Se for uma imagem, por exemplo, voce define um tamanho máximo de arquivo, bloqueando, ou voce manipula o arquivo para gerar uma espécie de Thumbnail?
Geralmente coloco um tamanho máximo sim, e caso ultrapasse ele não valida e volta pro form informando o usuário. E mesmo assim eu manipulo o arquivo gerando os thumbnails adequados para minha aplicação.
4 - Voce usa alguma biblioteca JS para realizar upload? (Tipo Uploadify, ajax uploader), ou vai no jeito tradicional?
Uma vez utilizei JS apenas para fazer cropping, mas geralmente faço do jeito tradicional, com um formzão acessando uma action que espera os parametros (dentre eles o file).
|
Blog | Github | About me! |
Contribua => Parser HTML
Compartilhe arquivos e ideias no ebaH! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/06/2011 21:37:33
|
Lucas Emanuel
GUJ Master
Membro desde: 09/08/2009 23:48:57
Mensagens: 1143
Localização: Heap
Offline
|
leandronsp wrote:
Lucas Emanuel wrote:1 - Nome do Arquivo. Qual nome voce dá ao arquivo em upload?
Pra mim isso não faz diferença
2 - Se o upload (ex. da foto) estiver junto com a regra de cadastro, voce separa os códigos de cadastro e o código de upload?
Não. Apenas especifico no form que tem um "carinha" multipart junto com a galera
3 - Se for uma imagem, por exemplo, voce define um tamanho máximo de arquivo, bloqueando, ou voce manipula o arquivo para gerar uma espécie de Thumbnail?
Geralmente coloco um tamanho máximo sim, e caso ultrapasse ele não valida e volta pro form informando o usuário. E mesmo assim eu manipulo o arquivo gerando os thumbnails adequados para minha aplicação.
4 - Voce usa alguma biblioteca JS para realizar upload? (Tipo Uploadify, ajax uploader), ou vai no jeito tradicional?
Uma vez utilizei JS apenas para fazer cropping, mas geralmente faço do jeito tradicional, com um formzão acessando uma action que espera os parametros (dentre eles o file).
1 - Nome do arquivo nao faz diferença? Se subir dois arquivos com mesmo nome? Que voce faz? Voce nao faz criptografia no nome do arquivo?
2 - Nesse caso quis dizer sobre o código do servidor. Por exemplo, voce mistura regra de cadastro com regra de upload, ou deixa, por exemplo, em classes separadas?
Abraço!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/06/2011 22:05:12
|
leandronsp
Virtual Machine Man
![[Avatar]](/images/avatar/b0dfd1bbadca4092f9d14d7a74085df0.jpg)
Membro desde: 22/03/2008 22:24:29
Mensagens: 520
Localização: São Paulo
Offline
|
1 - Foi mal, interpretei errado neste caso. Geralmente a imagem (file enviado) está associada a alguma entidade do sistema. Utilizo o ID da entidade em hexa (seguido do tipo de thumb p,b ou g) fazendo divisão por milhar nos diretórios. Ex: 2Fp.jpg, 2Fm.jpg. Foi isso que vc quis dizer?
2 - Ja tive que desenvolver aplicações onde o requisito do "cliente" era que ficasse tudo num formulário de cadastro só. Aí no código do servidor eu tratava o file e o cadastro no mesmo método. Eu não gosto disso. Comecei a praticar os famosos "baby steps" no cadastro.
- Primeira tela pede informações de login e senha. A partir daí o usuário ja estaria cadastrado no sistema.
- A próxima já é tela de edição (informações complementares, avatar, etc), e o form de upload do avatar seria em uma das abas de edição, sozinho, com sua regra de negócio propria.
De início eu tinha generalizado upload pra vários casos. Mas neste caso específico para cadastro eu costumo separar sim. Acho inclusive muito mais usável para o usuário.
|
Blog | Github | About me! |
Contribua => Parser HTML
Compartilhe arquivos e ideias no ebaH! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/06/2011 08:29:06
|
Lucas Emanuel
GUJ Master
Membro desde: 09/08/2009 23:48:57
Mensagens: 1143
Localização: Heap
Offline
|
leandronsp wrote:1 - Foi mal, interpretei errado neste caso. Geralmente a imagem (file enviado) está associada a alguma entidade do sistema. Utilizo o ID da entidade em hexa (seguido do tipo de thumb p,b ou g) fazendo divisão por milhar nos diretórios. Ex: 2Fp.jpg, 2Fm.jpg. Foi isso que vc quis dizer?
2 - Ja tive que desenvolver aplicações onde o requisito do "cliente" era que ficasse tudo num formulário de cadastro só. Aí no código do servidor eu tratava o file e o cadastro no mesmo método. Eu não gosto disso. Comecei a praticar os famosos "baby steps" no cadastro.
- Primeira tela pede informações de login e senha. A partir daí o usuário ja estaria cadastrado no sistema.
- A próxima já é tela de edição (informações complementares, avatar, etc), e o form de upload do avatar seria em uma das abas de edição, sozinho, com sua regra de negócio propria.
De início eu tinha generalizado upload pra vários casos. Mas neste caso específico para cadastro eu costumo separar sim. Acho inclusive muito mais usável para o usuário.
1 - Exatamente, esse é o ideal. No entanto, vamos pegar como exemplo, cadastro de uma pessoa com foto. Se voce for utilizar o ID dessa entidade, primeiro é necessário gravar esta entidade no Banco, retornar o ID gerado na gravação, para depois enfim gerar o hexa do ID, setar como nome da foto. Depois é necessario gravar o nome gerado em um campo desta entidade (ex. Foto), que terá o nome do arquivo. Nesse caso o único fluxo de cadastro teve que fazer dois esforço, um para gravar, e outro para dar um update após a inserção da foto. Isso é péssimo para desempenho.
Como lidar nesses casos?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/06/2011 08:41:36
|
leandronsp
Virtual Machine Man
![[Avatar]](/images/avatar/b0dfd1bbadca4092f9d14d7a74085df0.jpg)
Membro desde: 22/03/2008 22:24:29
Mensagens: 520
Localização: São Paulo
Offline
|
Lucas Emanuel wrote:1 - Exatamente, esse é o ideal. No entanto, vamos pegar como exemplo, cadastro de uma pessoa com foto. Se voce for utilizar o ID dessa entidade, primeiro é necessário gravar esta entidade no Banco, retornar o ID gerado na gravação, para depois enfim gerar o hexa do ID, setar como nome da foto. Depois é necessario gravar o nome gerado em um campo desta entidade (ex. Foto), que terá o nome do arquivo. Nesse caso o único fluxo de cadastro teve que fazer dois esforço, um para gravar, e outro para dar um update após a inserção da foto. Isso é péssimo para desempenho.
Como lidar nesses casos?
Eu não gravo o nome gerado da foto na base. Por exemplo, eu salvo o nome da foto com o hexa do ID do usuário => toHex(usuario.getId()) + ".jpg". Na entidade usuário ( ou algum outro helper ) eu tenho um método getUrlFoto(), que retorna a url quando eu preciso, e desta forma não preciso fazer update:
Fora que ter um campo na entidade só pra guardar o path físico não acho uma boa prática.
|
Blog | Github | About me! |
Contribua => Parser HTML
Compartilhe arquivos e ideias no ebaH! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/06/2011 09:04:15
|
Lucas Emanuel
GUJ Master
Membro desde: 09/08/2009 23:48:57
Mensagens: 1143
Localização: Heap
Offline
|
leandronsp wrote:
Lucas Emanuel wrote:1 - Exatamente, esse é o ideal. No entanto, vamos pegar como exemplo, cadastro de uma pessoa com foto. Se voce for utilizar o ID dessa entidade, primeiro é necessário gravar esta entidade no Banco, retornar o ID gerado na gravação, para depois enfim gerar o hexa do ID, setar como nome da foto. Depois é necessario gravar o nome gerado em um campo desta entidade (ex. Foto), que terá o nome do arquivo. Nesse caso o único fluxo de cadastro teve que fazer dois esforço, um para gravar, e outro para dar um update após a inserção da foto. Isso é péssimo para desempenho.
Como lidar nesses casos?
Eu não gravo o nome gerado da foto na base. Por exemplo, eu salvo o nome da foto com o hexa do ID do usuário => toHex(usuario.getId()) + ".jpg". Na entidade usuário ( ou algum outro helper ) eu tenho um método getUrlFoto(), que retorna a url quando eu preciso, e desta forma não preciso fazer update:
Fora que ter um campo na entidade só pra guardar o path físico não acho uma boa prática.
Olá, interessante sua abordagem.
Só uma dúvida. Voce diz que criou um método que retorna :
Só que nesse caso, ele está sempre retornando JPG. Se o usuario fez upload de uma foto com outras extensões, png, gif, etc, como voce lida com estas situações, sem ter no base o path físico da imagem?
Ou voce manipula a imagem para que ele sempre seja JPG?
Value !
This message was edited 1 time. Last update was at 21/06/2011 09:05:03
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/06/2011 09:12:26
|
leandronsp
Virtual Machine Man
![[Avatar]](/images/avatar/b0dfd1bbadca4092f9d14d7a74085df0.jpg)
Membro desde: 22/03/2008 22:24:29
Mensagens: 520
Localização: São Paulo
Offline
|
Geralmente eu manipulo o stream e escrevo como jpeg. Inclusive até criei um utilitário para facilitar esta rotina:
http://leandromaringolo.blogspot.com/2011/04/gerador-de-thumbnails-em-java.html
Nunca não manipulei. É complicado deixar livre as extensões.
|
Blog | Github | About me! |
Contribua => Parser HTML
Compartilhe arquivos e ideias no ebaH! |
|
|
 |
|
|
|
|