adicionando upload de multiplas imagens no jobRequest#72
Open
MateusVinicio wants to merge 1 commit intodevelopfrom
Open
adicionando upload de multiplas imagens no jobRequest#72MateusVinicio wants to merge 1 commit intodevelopfrom
MateusVinicio wants to merge 1 commit intodevelopfrom
Conversation
ronifabio
requested changes
Jun 7, 2022
Contributor
ronifabio
left a comment
There was a problem hiding this comment.
- Só está aparecendo os thumbnail da última ou últimas imagens enviadas pelo pressionamento do Adicionar.
- Saiba que o usuário pode querer adicionar uma imagem por vez pelo formulário. Então, se ele vai adicionar 3 imagens, ele abrirá a janela de upload 3 vezes. Por isso, é preciso guardar as URLs destas imagens, que já foram persistidas no Cloudinary, na sessão. Assim, o JSP vai ler estas URLs para apresentar corretamente os thumbnails.
- Verifique se os limites de tamanho de imagem definidos no application.properties estão sendo respeitados.
- spring.servlet.multipart.max-file-size=51000KB
- spring.servlet.multipart.max-request-size=51000KB
- Na verdade, estes valores estão muito altos, reduzir para 2000KB
- Apresentar mensagem de erro quando exceder este tamanho.
- O exception gerado é MaxUploadSizeExceededException
- Mesmo assim, usar a API de transformação de imagens do Cloudinary e ainda reduzir mais o tamanho para não ocupar tanto espaço de armazenamento.
| if (isValidateImage(image)) { | ||
| File jobImage = Files.createTempFile("temp", image.getOriginalFilename()).toFile(); | ||
| image.transferTo(jobImage); | ||
| Map data = cloudinary.uploader().upload(jobImage, ObjectUtils.asMap("folder", "jobs")); |
Contributor
There was a problem hiding this comment.
- Só para contextualização. Não tem problema de salvar no Cloudinary mesmo que o usuário desista do cadastro. Mesmo se o usuário desistir do cadastro, haverá outra história que removerá imagens antigas do Cloudinary. A API permite buscar as fotos por data.
| } | ||
|
|
||
| if (!successImages.isEmpty()) | ||
| sessionDTO.setImagesSession(successImages); |
Contributor
There was a problem hiding this comment.
- Como este POST está recebendo apenas uma ou mais imagem enviadas pelo botão adicionar, então este vetor successImage só vai ter estas imagens.
- Assim, se no POST anterior, a sessão já tinha uma imagem armazenada, a linha a seguir está substituindo o vetor anterior pelo atual, ou seja, com as imagens do POST corrente.
- Por isso, o JSP está apresentado sempre as imagens enviadas no Adicionar corrente.
- Lembre, o usuário pode usar esta página escolhendo uma imagem por vez, também. Para cada imagem, ele clica em adicionar. Então, estas imagens precisam ser acumuladas na sessão e apresentadas como thumbnails.
| sessionDTO.setImageSession((String)data.get("url")); | ||
| log.debug("Passo 5 {}", sessionDTO); | ||
| if (!invalidImages.isEmpty()) | ||
| redirectAttributes.addFlashAttribute("errors", invalidImages); |
Contributor
There was a problem hiding this comment.
- Inclua o vetor de imagens que já estão na sessão também no escopo de flash. Assim, o código fica mais legível e o JSP vai apresentar os thumbnails de acordo com a lista de URLs que estão neste atributo no escopo de flash.
- Lembre que o escopo de flash guarda temporariamente na sessão, usado em redirecionamentos, quando uma nova requisição é criada no redirect.
| public String saveFormImagePath(HttpSession httpSession, RedirectAttributes redirectAttributes, JobRequestDTO dto, Model model) throws IOException { | ||
| try { | ||
| if (dto.images.get(0).getOriginalFilename().equals("")) { | ||
| redirectAttributes.addFlashAttribute("errors", "Nenhuma imagem enviada."); |
Contributor
There was a problem hiding this comment.
- Quando é erro, faça um encaminhamento.
- Assim, o formulário continua preenchido e mesmo que ele dê F5, cairá no mesmo erro.
- Só quando o POST é sucesso é que se faz redirecionamento.
|
|
||
| sessionDTO.setImageSession((String)data.get("url")); | ||
| log.debug("Passo 5 {}", sessionDTO); | ||
| if (!invalidImages.isEmpty()) |
Contributor
There was a problem hiding this comment.
- Como boa prática, trate os erros no início do método.
- Geralmente, não usamos else, apenas if
- Então, se houver um erro, isto é verificado no if e se entrar nele, faz o encaminhamento para a página que vai mostrar o erro.
- Isso evita o uso do else, deixa o código mais difícil de ler.
- Com os tratamentos de erro no início com o uso do encaminhamento, todo o código que estiver abaixo destes ifs de validação, poderão executar com segurança, ou seja, os dados já foram validados.
| sessionDTO.setClientConfirmation(true); | ||
| sessionDTO.setDateCreated(DateUtil.getToday()); | ||
| sessionDTO.setStatus("Requerido"); | ||
| sessionDTO.setStatus("AVAILABLE"); |
Contributor
There was a problem hiding this comment.
- Usar o enum AVAILABLE
- public class JobRequest {
/**- AVAILABLE: disponível para candidaturas e permanece neste estado também durante o recebimento de candidaturas
- BUDGET: passa para este estado quando alcançado o total de candidaturas esperado ou quando o cliente encerra o recebimento de candidaturas
- TO_DO: o profissional foi escolhido para fazer o serviço e o serviço ainda não foi realizado
- CLOSED: o serviço foi realizado
*/
public enum Status {
AVAILABLE, BUDGET, TO_DO, CLOSED
};
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.