Как просмотреть файл после его загрузки в App_Data / Uploads в MVC 3 с помощью Razor? - PullRequest
5 голосов
/ 05 сентября 2011

Я новичок в MVC и застрял с проблемой. Я искал ответ повсюду и не смог его найти, но я уверен, что что-то пропустило меня. Проблема в том, что я не знаю, как получить доступ к файлу после его загрузки в папку App_Data. Я использую тот же код, который нашел на всех форумах:

На мой взгляд, я использую это

@using (Html.BeginForm("Index", "Home", FormMethod.Post, 
new { enctype="multipart/form-data" }))
{
<input type="file" name="file" />
<input type="submit" value="submit" />
}

Для моего контроллера я использую это

public class HomeController : Controller
{
// This action renders the form
public ActionResult Index()
{
    return View();
}

// This action handles the form POST and the upload
[HttpPost]
public ActionResult Index(HttpPostedFileBase file)
{
    // Verify that the user selected a file
    if (file != null && file.ContentLength > 0) 
    {
        // extract only the fielname
        var fileName = Path.GetFileName(file.FileName);
        // store the file inside ~/App_Data/uploads folder
        var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
        file.SaveAs(path);
    }
    // redirect back to the index action to show the form once again
    return RedirectToAction("Index");        
  }
} 

Моя модель

public class FileDescription
{
    public int FileDescriptionId { get; set; }
    public string Name { get; set; }
    public string WebPath { get; set; }
    public long Size { get; set; }
    public DateTime DateCreated { get; set; }
}

Дело в том, что я хочу загрузить файл в базу данных, а затем указать WebPath в качестве ссылки на мой файл. Надеюсь, я прояснил себя достаточно ясно. Любая помощь будет принята с благодарностью. Спасибо

Ответы [ 3 ]

10 голосов
/ 05 сентября 2011

Вы можете получить доступ к вашему файловому серверу (чтобы получить доступ к его содержимому из приложения ASP.NET) - просто используйте Server.MapPath("~/App_Data/uploads/<yourFileName>"), чтобы получить абсолютный путь (например, C: / inetpub / wwwroot / MyApp / Add_Data / MyFile.txt).

Содержимое папки App_Data не доступно напрямую по URL из соображений безопасности.Все конфиги, базы данных хранятся там, поэтому понятно почему.Если вам нужно, чтобы ваш загруженный файл был доступен через URL - загрузите его в другую папку.

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

8 голосов
/ 22 января 2014

Если это кому-нибудь поможет, вот простой пример для PDF:

public ActionResult DownloadPDF(string fileName)
{
    string path = Server.MapPath(String.Format("~/App_Data/uploads/{0}",fileName));
    if (System.IO.File.Exists(path))
    {
        return File(path, "application/pdf");
    }
    return HttpNotFound();
}
0 голосов
/ 05 июля 2012

Вы должны использовать универсальный обработчик для доступа к файлам. Рекомендуется хранить изображения / файлы в папке App_Data в IMO, поскольку по умолчанию файлы не обрабатываются.

Конечно, это зависит от ваших потребностей. Если вас совсем не интересует, кто может получить доступ к изображениям, просто загрузите их в папку вне папки app_data :)

Все зависит от ваших потребностей.

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