.NET Core 2.0 ASP.NET MVC Загрузить файл и вызвать диалоговое окно сохранения файла - PullRequest
0 голосов
/ 14 мая 2018

Я хотел бы выполнить загрузку файла и вызвать диалоговое окно сохранения файла браузера с уровня контроллера, если это возможно. (чтобы скрыть местоположение файла)

Я опирался на эту статью в своем решении.

https://www.codeproject.com/Articles/1203408/Upload-Download-Files-in-ASP-NET-Core

В конце я получаю тип файла (правильный путь к файлу и тип файла), но браузер не запускается, чтобы открыть диалоговое окно для сохранения этого файла. (что происходит в случае ссылки href)

Как этого добиться?

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Проверено, что это решение работает (включая Ваш ответ Anuraj):

https://www.codeproject.com/Articles/1203408/Upload-Download-Files-in-ASP-NET-Core

(не обязательно, когда я вызываю этот пост-запрос из javascript)

Но когдаон вызывается напрямую, вызывая действие контроллера с уровня HTTP или когда он вызывается как метод индекса контроллера.Проблема решена.

0 голосов
/ 15 июля 2018

Это полное решение для загрузки файла "alert.mp3" из каталога wwwroot / files из пользовательского контроллера.

Вид:

            <form class="form-inline" method="post" enctype="multipart/form-data" asp-controller="User" asp-action="DownloadFile">

                <input id="@item.ID" name="fileName" type="hidden" class="form-control" placeholder="@item.ID" value="alert.mp3">
                <button type="submit" style="border:hidden;background-color:transparent" data-toggle="tooltip" title="Download!">
                    <span type="submit" id="@item.ID;@item.AuthorID;Download" class="featurette-image img-fluid mx-auto glyphicon glyphicon-cloud-download" style="cursor:pointer;color:cornflowerblue;font-size: 2em;" data-toggle="tooltip" title="Download">
                    </span>
                </button>
            </form>

Контроллер:

    public async Task<FileResult> DownloadFile(string fileName)
    {
        var path = Path.Combine(
           Directory.GetCurrentDirectory(),
           "wwwroot\\files\\", fileName);

        var memory = new MemoryStream();
        using (var stream = new FileStream(path, FileMode.Open))
        {
            await stream.CopyToAsync(memory);
        }
        memory.Position = 0;
        return File(memory, MediaTypeNames.Application.Octet, Path.GetFileName(path));
    }

ура!

0 голосов
/ 14 мая 2018

Вы можете сделать что-то вроде этого.

public IActionResult Download(string filename)
{
    var file = Path.Combine(_hostingEnvironment.WebRootPath, "files", filename);
    return File(System.IO.File.ReadAllBytes(file), "application/octet-stream", filename);
}

Он читает все байты из файла и возвращает application/octet-stream, что показывает диалоговое окно загрузки.

Другие упомянутые способы здесь

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