Estou desenvolvendo uma aplicação web, e necessito salvar arquivos no campo tipo arquivo.
oque estou fazendo é converter o arquivo selecionado para base64 e enviando o código para minha api c#, convertendo esse código em byte,
e salvando no campo.
Esta criando o registro no banco porem ao tentar abrir o documento através do sistema benner rh, esta apresentando um erro, dizendo que arquivo não foi encontrado.
Abaixo esta uma pagina simples apenas com a rotina de salvar o arquivo no banco, e gostaria de um auxilio sobre oque pode estar errado, e qual seria a melhor maneira de fazer isso.
<html>
<head>
</head>
<body>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<input type="file" id="carrega_arquivo" />
<button onclick="salvar()"> salvar</button>
</body>
<script>
novo()
function novo(){
File.prototype.convertToBase64 = function(){
return new Promise(function(resolve, reject) {
var reader = new FileReader();
reader.onloadend = function (e) {
resolve({
fileName: this.name,
result: e.target.result,
error: e.target.error
});
};
reader.readAsDataURL(this);
}.bind(this));
};
$("#carrega_arquivo").on('change',function(){
var selectedFile = this.files[0];
selectedFile.convertToBase64().
then(function(obj){
arquivobase64 = obj.result
encoded = obj.result.toString().replace(/^data:(.*,)?/, '');
if ((encoded.length % 4) > 0) {
encoded += '='.repeat(4 - (encoded.length % 4));
}
});
});
}
async function salvar(){
var request = {
"NOME": "nome arquivo",
"ARQUIVO": encoded
}
var resp_salva_arquivos = await axios.post("http://10.1.1.17/DEMO_RH_PROD/api/cadcurriculo/novo_arquivo?CANDIDATO=123" + "&TIPOARQUIVO=2", data=request);
}
</script>
</html>
código c#
public class Model_arquivo_novo
{
public string NOME {get;set;}
public string ARQUIVO {get;set;}
}
[Route("novo_arquivo")]
[HttpPost]
public IHttpActionResult novo_arquivo(Model_arquivo_novo request, String CANDIDATO, String TIPOARQUIVO)
{
try
{
RS_CURRICULODOCUMENTOS entidade = RS_CURRICULODOCUMENTOS.Create();
byte[] decodedBytes_arquivo = Convert.FromBase64String(request.ARQUIVO);
entidade["TIPOARQUIVO"].SetString(TIPOARQUIVO);
entidade.Fields["ANEXO"] = new FileField(new MemoryStream(decodedBytes_arquivo), "teste.docx");
entidade.Fields["NOME"] = request.NOME;
entidade["CANDIDATO"].SetString(CANDIDATO);
entidade.Save();
return Ok(decodedBytes_arquivo.Length);
}
catch (Exception ex)
{
return Ok(ex.Message);
}
}