Quiero permitir la descarga de archivos en mi aplicación MVC, sin simplemente usar un hipervínculo. Planeo usar una imagen o similar y hacer que se pueda hacer clic usando jQuery. Por el momento tengo un simple solo para probar.Descarga de archivos en Asp.Net MVC 2
Encontré una explicación de cómo realizar la descarga a través de un método de acción, pero desafortunadamente el ejemplo todavía tenía enlaces de acción.
Ahora, puedo llamar al método de acción de descarga muy bien, pero no pasa nada. Supongo que tengo que hacer algo con el valor de retorno, pero no sé qué ni cómo.
Aquí está el método de acción:
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)
};
}
Aquí está la clase 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();
}
}
que llamo el método de acción a través de:
<span id="downloadLink">Download</span>
que se hace se puede hacer clic a través de:
$("#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?
});
});
Tenga en cuenta que el parámetro de nombre de archivo se recibe correctamente por el método de acción y todo, es solo que no pasa nada, así que supongo que necesito manejar el valor de retorno de alguna manera?
Tu clase 'BinaryContentResult' no debería existir. Use 'FileResult'. – SLaks
Ok, ¿eso es una clase estándar o algo así? ¿Cómo me ayudaría a resolver el problema? – Anders