Te dejo codigo que hice yo en su momento desde JS
El codigo obtiene el fichero de un campo, y lo sube via AJAX al servidor. Este lo guarda en las carpetas de ficheros, le asigna una id, guarda en la db y posteriormente contesta con la ruta en el servidor del fichero y el nombre.
var hihaError = false;
var errorMsg = "ERROR: \n";
var serieAlu = $("#serie").val();
var seriePre = $("#cf_serie").val();
var filename = $("#mod_file_b2").val();
var filedata = $("#mod_file_b2").prop('files')[0];
var urlFRM = $("#urlAJAX").val();
$("#ajaxform_message_b2").html("<img src='../images/loading.gif' style='width:16px; title='Processant dades'>");
var data = new FormData();
data.append('serieAlu',serieAlu);
data.append('seriePre',seriePre);
data.append('filename',filename);
data.append('filedata',filedata);
jQuery.ajax({
url: urlFRM+"?/aplicacio=410&/tipus_plana=1000",
type: 'POST',
data: data,
cache: false,
processData: false,
contentType: false,
success: function (result) {
var respuestaParseada = jQuery.parseJSON(result);
if ( respuestaParseada["response"] == "OK" ) {
if ( $("#spanDownloadB2File").html().trim() != 0 ) {
// Existe el boton, entonces cambiamos el download attr
$("#viewfile_b2").attr('onclick','descarrega("'+respuestaParseada["nomfitxer_b2"]+'");');
} else {
// Creamos el boton
$("#spanDownloadB2File").html("<input type='button' id='viewfile_b2' class='Boton' value='Veure Fitxer' onclick='javascript:descarrega(\""+respuestaParseada["nomfitxer_b2"]+"\")'>");
}
$("#flag_b2").prop('checked', true);
$("#ajaxform_message_b2").html("<img src='../images/valid.png' style='width:16px;'>");
$("#ajaxform_file_b2").delay(1500).fadeOut('slow');
} else {
$("#ajaxform_message_b2").html("<img src='../images/error.png' style='width:16px;'> "+respuestaParseada["message"]);
}
},
error: function () {
$("#ajaxform_message_b2").html("<img src='../images/error.png' style='width:16px;'> <span style=''>Error al pujar el fitxer</span>");
}
});