MVC: Comment obtenir le chemin complet du fichier à partir du champ de saisie?

J’ai le code de razor suivant:

@Html.ValidationSummary(false) @using (Html.BeginForm("EncryptFile", "Encryption", new { returnUrl = Request.Url.AbsoluteUri }, FormMethod.Post, new { @id = "encryptionform", @class = "form-horizontal" })) {
@Html.Label("File", new { @class = "control-label col-md-2" })
}

et le code de contrôleur suivant est appelé lorsque je clique sur le bouton Crypter:

  [HttpPost] public ActionResult EncryptFile(ssortingng uploadedfile) { /*process the file without uploading*/ return Json(new { status = "success", message = "Encrypted!" }); } 

Je suis capable de bash cette action lorsque je clique sur le bouton de chiffrement, mais la chaîne uploadfile est toujours null . Comment puis-je obtenir le chemin d’access au fichier de remplissage du fichier sélectionné? Veuillez noter que je n’essaye pas de le télécharger sur le serveur (bien que “uploadé” apparaisse dans le nom), j’ai juste besoin du chemin du fichier.

MODIFIER

J’ai vu dans IE 11 que ce qui suit indiquait complètement le chemin du fichier (la partie à l’intérieur de l’alerte):

alert($("#encryptfilefield").val());

Cependant, ce n’est pas une solution complète, et il semble qu’il n’y en ait pas, car c’est un problème de sécurité. Je vous remercie.

Réponse mise à jour

Malheureusement, il n’existe aucun moyen d’obtenir ces informations de manière cohérente parmi tous les navigateurs. Il existe plusieurs publications à ce sujet sur ce sujet et la conclusion est que les navigateurs ne le permettent pas pour des raisons de sécurité.

J’ai trouvé que dans IE 11, ils incluaient le chemin dans la propriété .value de l’élément dom d’entrée, mais je ne sais pas si cela fonctionne dans les autres versions et si cela ne fonctionne pas en chrome.

 $('input[type=file]').change(function () { console.dir(this.value); console.dir(this.files[0]) }) 

Malheureusement, c’est à peu près tout ce que vous pouvez attendre. Voici un article qui contient plusieurs choses à faire pour éventuellement réaliser des scénarios très spécifiques.

Comment obtenir le chemin complet du fichier sélectionné lors du changement de en utilisant javascript, jquery-ajax?

Réponse originale (comment obtenir le chemin du fichier “Après”, il atteint le serveur)

Le problème des parameters nuls auquel je pense est que MVC se lie à la propriété du nom d’élément.

   

et votre action de contrôleur est marquée comme type chaîne, ce qui n’est pas votre type d’entrée.

vous pouvez soit changer cela en ceci,

 [HttpPost] public ActionResult EncryptFile(HttpPostedFileBase uploadedfile) { 

ou essayez d’extraire le fichier directement à partir de l’object Request comme ci-dessous, vous devrez le sauvegarder quelque part avant d’obtenir le chemin complet, mais je ne crois pas que vous obtiendrez le chemin du fichier d’où il provient, mais après vous enregistrez.

 [HttpPost] public ActionResult EncryptFile(ssortingng uploadedfile) { HttpPostedFileBase myfile = Request.Files[0]; if (file.ContentLength > 0) { // extract only the fielname var fileName = Path.GetFileName(file.FileName); // store the file inside ~/App_Data/uploads folder var path = Path.Combine(Server.MapPath("~/App_Data/uploads"),fileName); file.SaveAs(path); } /*process the file without uploading*/ return Json(new { status = "success", message = "Encrypted!" }); }