Chcę włączyć pobieranie pliku w mojej aplikacji MVC, bez korzystania z hiperłącza. Planuję użyć obrazu lub podobnego i sprawię, że będzie można go klikać za pomocą jQuery. W tej chwili mam prosty test.Pobieranie pliku w Asp.Net MVC 2
Znalazłem wyjaśnienie, jak wykonać pobieranie za pomocą metody akcji, ale niestety przykład nadal zawierał linki akcji.
Teraz mogę wywołać metodę akcji pobierania, ale nic się nie dzieje. Chyba muszę coś zrobić z wartością zwracaną, ale nie wiem, co i jak.
Oto sposób działania:
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)
};
}
Oto klasa 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();
}
}
I wywołać metodę działania poprzez:
<span id="downloadLink">Download</span>
która jest wykonana klikalne poprzez:
$("#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?
});
});
Zwróć uwagę, że parametr nazwa_pliku został poprawnie odebrany przez metodę akcji i wszystko, po prostu nic się nie dzieje, więc myślę, że muszę jakoś obsłużyć wartość zwrotu?
Twoja klasa 'BinaryContentResult' nie powinna istnieć. Użyj 'FileResult'. – SLaks
Ok, czy to standardowa klasa czy coś takiego? Jak to pomoże mi rozwiązać problem? – Anders