Melhores Práticas: Upload de Arquivo  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
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

leandronsp
Virtual Machine Man
[Avatar]

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!
[Email] [WWW] [MSN]
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!
leandronsp
Virtual Machine Man
[Avatar]

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!
[Email] [WWW] [MSN]
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?
leandronsp
Virtual Machine Man
[Avatar]

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!
[Email] [WWW] [MSN]
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

leandronsp
Virtual Machine Man
[Avatar]

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!
[Email] [WWW] [MSN]
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team