+5 votos
64 visitas

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);
        }
    }

 

fechada com o comentário: Falta de respostas do autor.
por (105 pontos)
fechada por | 64 visitas
Parece que está tudo certo. Você tem algum log do erro "Registro não encontrado"?
Ocorre algum erro ao executar o código abaixo

public IHttpActionResult novo_arquivo(Model_arquivo_novo request, String CANDIDATO, String TIPOARQUIVO) {
....
entidade.Save(); /// ???
....

}

Perguntas relacionadas

439 perguntas
486 respostas
350 comentários
473 usuários