Загрузить файл из веб-браузера на рабочий стол из 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] })
После внесения изменений я могу загрузить файл на рабочий стол, оставаясь на странице, где находится ссылка для загрузки, и не открывая ссылку в новой вкладке.