Estou fazendo um projeto de curso , e preciso fazer o upload de um pdf pelo javascript , em seguida adicionar no sql utilizando node , porém no javascript o binário referente ao arquivo aparece errado.
Node: router.post(’/reclamacoes/inserirArquivo/’,(req,res) =>{
const id = req.body.id;
const file = req.body.arquivo;
execSQLQuery(insert into SGArquivos (Id,Nome,Arquivo) values (${id},'${id}'+'.pdf', CONVERT(VARBINARY(max), '${file}'))
,res);
})
SQL:
Tabela:
CREATE TABLE SGArquivos
(
Id int primary key,
Nome varchar(50) not null,
Arquivo varbinary(max) not null
)
Javascript e HTML:
<span>Nota fiscal:</span> <input type="file" id="files" name="files[]" value="Enviar um arquivo"/> <div id="progress_bar"><div class="percent">0%</div></div>] <span id="list"></span>
jQuery.support.cors = true;
var url1 = "http://localhost:54000/reclamacoes/id/";
var idArquivo=null;
$(document).ready(function(){
$.getJSON(url1, function(result){
var arr = result;
idArquivo=arr[0].UltimoId+1;
alert(idArquivo);
});
});
var url="http://localhost:54000/reclamacoes/inserirArquivo/";
var progress = document.querySelector('.percent');
function errorHandler(evt) {
alert('teste1');
switch(evt.target.error.code) {
case evt.target.error.NOT_FOUND_ERR:
alert('File Not Found!');
break;
case evt.target.error.NOT_READABLE_ERR:
alert('File is not readable');
break;
case evt.target.error.ABORT_ERR:
break; // noop
default:
alert('An error occurred reading this file.');
};
}
function updateProgress(evt) {
alert('teste2');
// evt is an ProgressEvent.
if (evt.lengthComputable) {
var percentLoaded = Math.round((evt.loaded / evt.total) * 100);
// Increase the progress bar length.
if (percentLoaded < 100) {
progress.style.width = percentLoaded + '%';
progress.textContent = percentLoaded + '%';
}
}
}
function handleFileSelect(evt) {
alert('teste3');
progress.style.width = '0%';
progress.textContent = '0%';
alert('teste4');
var files = evt.target.files; // FileList object
// Loop through the FileList and render image files as thumbnails.
f=files[0];
var reader = new FileReader();
reader.onerror = errorHandler;
reader.onprogress = updateProgress;
reader.onloadstart = function(e) {
document.getElementById('progress_bar').className = 'loading';
};
reader.onload = function(e) {
// Ensure that the progress bar displays 100% at the end.
progress.style.width = '100%';
progress.textContent = '100%';
setTimeout("document.getElementById('progress_bar').className='';", 2000);
document.getElementById('list').innerHTML = e.target.result;
$.ajax({
url: url,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({"id": idArquivo},{"arquivo": e.target.result}),
success: function(response){ console.log( response ); }
});
}
reader.readAsText(f);
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
resultado dos inserts
convertendo pra string isso deu ‘undefined’ , acredito que o valor da variavel que estou passando como parametro na inserção do arquivo na verdade está errado , o e.target.result deve estar passando valor errado.