Загрузка файла в Asp.Net MVC 2 - PullRequest
       2

Загрузка файла в Asp.Net MVC 2

5 голосов
/ 30 августа 2010

Я хочу включить загрузку файлов в моем приложении MVC, без использования гиперссылки. Я планирую использовать изображение или тому подобное и сделать его кликабельным с помощью jQuery. На данный момент у меня есть просто для тестирования.

Я нашел объяснение загрузки через метод действия, но, к сожалению, в примере все еще были ссылки на действия.

Теперь я могу нормально вызывать метод действия загрузки, но ничего не происходит. Думаю, мне нужно что-то сделать с возвращаемым значением, но я не знаю, что и как.

Вот метод действия:

    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)
        };
    }

Вот класс 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();
    }
}

Я вызываю метод действия через:

<span id="downloadLink">Download</span>

, который становится кликабельным с помощью:

$("#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?
    });
});

Обратите внимание, что параметр fileName правильно получен методом действия и все, просто ничего не происходит, поэтому я думаю, что мне нужно как-то обработать возвращаемое значение?

1 Ответ

5 голосов
/ 30 августа 2010

Вы не хотите загружать файл с помощью AJAX, вы хотите, чтобы браузер загружал его. $ .get () получит его, но нет способа сохранить локально из Javascript, по соображениям безопасности браузер должен участвовать Просто перенаправьте на место загрузки, и браузер с этим справится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...