Tenho um formulário em html onde tenho um input do tipo file, tenho que fazer o post dele e gravar os bytes no SQL Server, porém ele grava no banco apenas os bytes do “C:/fakepath/nomeDoArquivo”. Estou utilizando jQuery e o backend é em java, segue o html e o backend.
<form id="manutencaoForm" method="post"
enctype="multipart/form-data">
<fieldset>
<div class="form-group">
<label class="col-md-2 control-label">Anexar </label>
<div class="col-md-10">
<input type="file" class="btn btn-default"
name="filenameAnexo" id="filenameAnexo">
</div>
</div>
</fieldset>
JS:
var incluiCertificado = () => {
var formData = new FormData();
// Serializa inputs que estão no container da solicitação
$('#manutencaoForm :input').each(function(i, elemento) {
formData.append($(elemento).attr('name'), $(elemento).val());
});
$.ajax({
url: '/anexo/inclui',
type: 'POST',
data: formData,
contentType: false,
processData: false
}).done(function(retorno){
$('#dlgCertificado').dialog("close");
carregaDados();
});
}
Java:
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/inclui")
public Response inclui(MultipartFormDataInput formData) {
Map<String, List<InputPart>> uploadForm = input.getFormDataMap();
List<InputPart> inputParts = uploadForm.get("filenameAnexo");
Map<String, Object> mapa = new HashMap<>();
for (InputPart inputPart : inputParts) {
try {
MultivaluedMap<String, String> header = inputPart.getHeaders();
fileName = getFileName(header);
//convert the uploaded file to inputstream
InputStream inputStream = inputPart.getBody(InputStream.class,null);
byte [] bytes = IOUtils.toByteArray(inputStream);
mapa.put(e.getKey(), fileName);
mapa.put(e.getKey() + "_bytes", bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
MeuObj meuObj= new MeuObj();
meuObj.setFilename(mapa.get("filenameAnexoCertificado_bytes"));
getEntityManager().merge(meuObj);
return Response.ok().build();
}
Claro que aqui deixei tudo meio que junto pra não ficar maior do que já está, mas é só pra ter uma noção de como está fazendo. Ele grava no banco porém quando faço um serviço de GET para tratar esses bytes e fazer o download do documento ele me retorna um documento com o caminho C:\fakepath\nomeDoArquivo. Não sei onde está o meu erro se alguém puder me ajudar, desde já agradeço.