0
votes

Comment envoyer correctement un fichier au contrôleur en MVC en utilisant jQuery

J'ai une vue qui accepte un fichier comme: xxx

et un contrôleur comme SO: xxx

Qu'est-ce que je suis Essayer d'atteindre consiste à adopter un fichier du client au contrôleur, j'ai lu beaucoup autour, mais jusqu'à présent, aucun n'a fonctionné du tout, c'est mon code JavaScript qu'il est censé appeler mon contrôleur: < Pré> xxx

mais mes points d'arrêt dans VS2017 dans le code du contrôleur ne sont pas des hits, je fais quelque chose de mal? Quelqu'un peut-il clarifier le processus d'envoi d'un fichier à un contrôleur MVC? Je travaille avec MVC et Netcore 2.1.

EDIT: En analysant mon appel à Fiddler, il dit que la réponse de l'appel était OK (200), donc je ne comprends donc pas pourquoi mes points d'arrêt sur mon contrôleur ne sont pas touchés. Merci!


6 commentaires

Il y a jQuery dans votre titre de question, mais vous envoyez une demande avec xmlhttprequest . Pourquoi pas $. Poste () ou $. Ajax () ?


@ Vasily.SIB Merci pour votre réponse ... Pouvez-vous fournir un petit exemple sur la manière dont vous mettrez en œuvre cela?


Je ne vois aucun routage, alors je suppose que vous utilisez le routage par défaut. L'URL dans XHR.OPEN () semble incorrecte, devrait être / uploadfiles / uploadfiles (/ contrôleur / action). Aussi pourquoi n'envoyez-vous pas le formulaire via Ajax?


@MCB Merci beaucoup pour votre réponse ... Pouvez-vous fournir un petit exemple comme réponse?


@Fabioenne, bien sûr. JQuery Docs a déjà ces échantillons pour ajax et POST (qui est un raccourci pour AJAX actuellement)


Eh bien, si votre contrôleur est uploharfilescontroller et que l'action est appelée UPLOADFILES (comme dans votre exemple fourni), votre URL doit être XHR.OPEN ("POST", "/ UPLOADFILES / UPLOADFILES", TRUE);


4 Réponses :


0
votes

Essayez de modifier la fonction avec le code suivant:

xhr.send(fd)


2 commentaires

Cela devrait être un commentaire, pas une réponse


@ Bradbury9 Les nouveaux utilisateurs ont besoin de 50 recommandations pour ajouter un commentaire, mais vous avez raison - les réponses ne doivent pas dire "Essayez" .




1
votes

Placez le fichier dans le corps de la demande:

[HttpPost("UploadFiles")]
public virtual string UploadFiles()
{
    using (FileStream stream = new FileStream(Request.Headers["File-Name"], FileMode.Create))
    {
        await Request.Body.CopyToAsync(stream);
    }
    return "File uploaded!";
}


0 commentaires

0
votes

Vous pouvez utiliser Ajax pour passer comme formdata sur contrôleur.

JS: P>

[HttpPost]
public async Task<IActionResult> Upload(IList<IFormFile> files)


0 commentaires