Je veux activer le téléchargement de fichier dans mon application MVC, sans utiliser simplement un lien hypertexte. Je prévois d'utiliser une image ou similaire et de le rendre cliquable en utilisant jQuery. En ce moment j'ai un simple juste pour tester.Téléchargement de fichier dans Asp.Net MVC 2
J'ai trouvé une explication de faire le téléchargement par une méthode d'action, mais malheureusement l'exemple avait encore des liens d'action.
Maintenant, je peux appeler la méthode d'action de téléchargement très bien, mais rien ne se passe. Je suppose que je dois faire quelque chose avec la valeur de retour, mais je ne sais pas quoi ou comment.
est ici la méthode d'action:
public ActionResult Download(string fileName)
{
string fullName = Path.Combine(GetBaseDir(), fileName);
if (!System.IO.File.Exists(fullName))
{
throw new ArgumentException("Invalid file name or file does not exist!");
}
return new BinaryContentResult
{
FileName = fileName,
ContentType = "application/octet-stream",
Content = System.IO.File.ReadAllBytes(fullName)
};
}
est ici la classe BinaryContentResult:
public class BinaryContentResult : ActionResult
{
public BinaryContentResult()
{ }
public string ContentType { get; set; }
public string FileName { get; set; }
public byte[] Content { get; set; }
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.ClearContent();
context.HttpContext.Response.ContentType = ContentType;
context.HttpContext.Response.AddHeader("content-disposition",
"attachment; filename=" + FileName);
context.HttpContext.Response.BinaryWrite(Content);
context.HttpContext.Response.End();
}
}
j'appelle la méthode d'action via:
<span id="downloadLink">Download</span>
qui est fait cliquable via:
$("#downloadLink").click(function() {
file = $(".jstree-clicked").attr("rel") + "\\" + $('.selectedRow .file').html();
alert(file);
$.get('/Customers/Download/', { fileName: file }, function (data) {
//Do I need to do something here? Or where?
});
});
Notez que le paramètre fileName est correctement reçu par la méthode d'action et tout, c'est juste que rien ne se passe donc je suppose que je dois gérer la valeur de retour en quelque sorte?
Votre classe 'BinaryContentResult' ne devrait pas exister. Utilisez 'FileResult'. – SLaks
Ok, est-ce une classe standard ou quelque chose? Comment cela m'aiderait-il à résoudre le problème? – Anders