Я предположил, что должен использовать FileResult, чтобы пользователи могли загружать файлы из моего приложения ASP.NET MVC. Но единственные примеры, которые я могу найти, всегда связаны с файлами изображений (с указанием типа содержимого image/jpeg).Загрузить файл любого типа в Asp.Net MVC с помощью FileResult?
Но что, если я не могу узнать тип файла? Я хочу, чтобы пользователи могли загружать практически любой файл из файловой области моего сайта.
Я прочитал один из способов сделать это (см. Код previous post для кода), который на самом деле отлично работает, за исключением одного: имя файла, которое появляется в диалоговом окне «Сохранить как», конкатенируется из пути к файлу с символами подчеркивания (folder_folder_file.ext). Кроме того, кажется, люди думают, что я должен вернуть FileResult вместо использования этого пользовательского класса, который я нашел BinaryContentResult.
Кто-нибудь знает «правильный» способ сделать такую загрузку в MVC?
EDIT: я получил ответ (ниже), но просто подумал, что я должен опубликовать полный рабочий код, если кто-то заинтересован:
public ActionResult Download(string filePath, string fileName)
{
string fullName = Path.Combine(GetBaseDir(), filePath, fileName);
byte[] fileBytes = GetFile(fullName);
return File(
fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}
byte[] GetFile(string s)
{
System.IO.FileStream fs = System.IO.File.OpenRead(s);
byte[] data = new byte[fs.Length];
int br = fs.Read(data, 0, data.Length);
if (br != fs.Length)
throw new System.IO.IOException(s);
return data;
}
То, что вы делаете, это довольно опасно. Вы в значительной степени позволяете пользователям загружать любой файл с вашего сервера, к которому может обратиться пользователь-пользователь. –
True - удаление пути к файлу, и прибивание его в тело actionresult было бы несколько безопаснее. По крайней мере, они имеют доступ только к определенной папке. – shubniggurath
Существуют ли какие-либо инструменты, которые позволят вам найти потенциально опасные лазейки, такие как этот? – David