Загрузить файл из веб-браузера на рабочий стол из MVC5

У меня есть проект MVC5, и у него есть представление, которое позволяет пользователю загружать документы с SQL Server. Это представление представляет собой страницу формы с одним или несколькими элементами управления вводом файлов, которые позволяют пользователю загружать файлы любого типа. Когда пользователь выбирает файл на рабочем столе и помещает его в поле ввода файла и нажимает кнопку отправки, файл преобразуется в тип byte[] и сохраняется в SQL Server. После загрузки файла пользователь снова открывает ту же страницу, и в элементе управления появляется ссылка для загрузки. Если пользователь нажимает на него, файл не сохраняется на рабочем столе, но если пользователь щелкает правой кнопкой мыши ссылку и открывает ее на новой вкладке, файл можно загрузить. Вот следующий фрагмент со страницы просмотра, который позволяет пользователю загружать файлы из элемента управления загрузкой:

FillTemplateFields.cshtml

@{
     string[] fileUploadItems = @value.Split(',');
 }

@for (int k = 0; k < @fileUploadItems.Length; k++)
{
     <div id="fileContainer-@count">
     @if(fileUploadItems[k] != null){
         <input id="sub-file-@count" type="file" value="@fileUploadItems[k]" placeholder="@control.Placeholder" name="fileUpload-@count" data-sub-channel="sub-input-@count">

         @Ajax.ActionLink("Download " + @fileUploadItems[k], "DownloadFile", new { fieldID = @count, fileName = @fileUploadItems[k] }, null)
         <br />
 }
 else
 {
     <input id="sub-file-@count" type="file" value="" placeholder="@control.Placeholder" name="fileUpload-@count" data-sub-channel="sub-input-@count">
 }

 <a id="deleteControl-@count" href="#">Delete</a>

Объект fileUploadItems содержит имена файлов, сохраненные в элементе управления загрузкой. Помощник Ajax.ActionLink создает ссылку, которая вызывает метод 'DowloadFile', который передает значения поля и имя файла и находит файл, который был сохранен на сервере Sql:

TemplateValuesController.cs

public FileResult DownloadFile(int fieldID, string fileName)
    {
        tbl_FileStorage file = db.tbl_FileStorage.Where(f => f.FileName == fileName && f.TemplateFieldValuesID == fieldID).First();
        return File(file.File, System.Net.Mime.MediaTypeNames.Application.Octet, file.FileName);
    }

Я могу успешно загрузить файл, щелкнув правой кнопкой мыши ссылку для загрузки и открыв ее на новой вкладке, но не могу загрузить ее, оставаясь на той же странице, и не пытаюсь передать файл на новой вкладке браузера, Может ли кто-нибудь дать мне решения, что я хочу? Спасибо.

1 ответ

Проблема была решена. Я исправил это, изменив одну строку кода на странице "FillTemplateFields.cshtml".

До изменения

@Ajax.ActionLink("Download " + @fileUploadItems[k], "DownloadFile", new { fieldID = @count, fileName = @fileUploadItems[k] }, null)

После изменения

@Html.ActionLink("Download " + @fileUploadItems[k], "DownloadFile", new { fieldID = @count, fileName = @fileUploadItems[k] })

После внесения изменений я могу загрузить файл на рабочий стол, оставаясь на странице, где находится ссылка для загрузки, и не открывая ссылку в новой вкладке.

Другие вопросы по тегам