Mi interfaz de usuario tiene una entrada para cargar el archivo y una entrada para el nombre del archivo.
Quiero obtener tanto el archivo como su nombre del usuario en la misma solicitud de ajax y cargar el archivo con el nombre obtenido en mi servidor.
la pregunta es ¿cómo puedo obtener el archivo (binario) y el nombre del archivo del usuario en la misma solicitud?
aquí está mi intento pero da como resultado un error 400.
Función en C#:
public IActionResult UploadImage(IFormFile upload, string fileWithName) { //some code here }y aquí está mi ajax:
$("#startUploading").on("click",function() { var fileInput = $.trim($("#myfile").val()); var formData = new FormData(); formData.append('upload', $('#myfile')[0].files[0]); formData.append('pathWithName', $("#fileAddressUploadTo").val()); $.ajax({ url: apiUrl+'/api/V1/Servers/UploadImage', type: 'POST', data: formData, beforeSend: function (xhr) { xhr.setRequestHeader("Authorization", 'Bearer ' + localStorage.getItem('token')); }, cache: false, processData: false, contentType: false }); });El error 400 significa una solicitud incorrecta, pero según mi prueba, descubrí que funcionó para mí. Entonces, me temo que el problema en su código puede estar relacionado con $('#myfile')[0].files[0] , vea mi código a continuación
<div> <input type="file" id="uploadFile" /> <button id="btn4">upload</button> </div> $("#btn4").click(function(){ var form = new FormData(); var temp = $('#uploadFile').prop('files'); form.append("file",temp[0]); form.append("name","myFile"); console.log(form); $.ajax({ url: 'https://localhost:44321/hello/upload', type: 'POST', data: form, cache:false, contentType:false,//stop jquery auto convert form type to default x-www-form-urlencoded processData:false, success: function (d) { alert(d) } }); }); public string upload(IFormFile file, string name) { return "hello"; }