Otavio boa tarde, poderia verificar, fiz o codigo que criar um arquivo temporario na sua maquina, depois passei esse arquivo temporario para um permanente, salvando a foto com o cogido do produto.
Algo assim.
@PostMapping("/upload")
@PreAuthorize("hasAuthority('ROLE_CADASTRAR_PRODUTO')")
public void upload(@RequestParam MultipartFile foto) {
try {
Path arquivoTemp = Files.createTempFile(null, null);
Files.copy(foto.getInputStream(), arquivoTemp, StandardCopyOption.REPLACE_EXISTING);
caminhoFoto = arquivoTemp.toString();
System.out.println(caminhoFoto);
} catch (IOException e) {
throw new RuntimeException("erro ao tentar gerar o arquivo");
}
}
aqui eu criei um arquivo temporario, e depois fiz o seguinte.
@PostMapping
@PreAuthorize("hasAuthority('ROLE_CADASTRAR_PRODUTO')")
public ResponseEntity<Produto> salvar(@RequestBody Produto produto) {
Produto produroRetornado = produtoRepository.save(produto);
Path origem = Paths.get(caminhoFoto);
Path destino = Paths.get("C://Upload/" + produroRetornado.getCodigo() + ".png");
try {
Files.copy(origem, destino, StandardCopyOption.REPLACE_EXISTING);
produroRetornado.setCaminhoFoto(destino.toString());
Produto produtoAux = produtoRepository.findOne(produroRetornado.getCodigo());
BeanUtils.copyProperties(produroRetornado, produtoAux, "codigo");
produtoRepository.save(produtoAux);
} catch (IOException e) {
e.printStackTrace();
}
return ResponseEntity.status(HttpStatus.CREATED).body(produroRetornado);
}
Ai agora na minha entidade produto, no banco de dados está o caminho dela com o nome da foto, tipo assim.
C:\Upload\2.png
Está correto assim? é esse caminho que devemos salvar? e outra coisa, eu tive que criar a pasta na mão de upload na raiz da minha maquina, e quando for subir pro servidor, no deploy, como que fica?