【问题标题】:how to save the data from database to a folder in mvc application如何将数据库中的数据保存到mvc应用程序的文件夹中
【发布时间】:2017-07-31 07:47:39
【问题描述】:

我已经通过管理端的应用程序将一些文件保存在 SQL 表中,但现在我必须将保存在表中的文件取回到网站的另一个应用程序的文件夹中。我需要将文件保存在名为 MyFiles 的文件夹中,并希望通过单击下载链接下载文件 控制器

    public ActionResult Index()
    {
        var Downloads = db.Downloads.ToList();
        return View(Downloads);
    }

查看

@model List<ThaniyamBank.Models.Download>


<div class="row">

        @foreach (var item in Model)
        {
            <div class="col-lg-8 col-md-8 col-sm-8 col-xs-12 form_cont">
                <p class="all_sub_hed">@item.ItemName</p>
                <p class="tet">@item.Description</p>
                <a href="http://localhost:56572/MyFiles/@(item.Url)" class="hvr-icon-back">Download Form</a>
            </div>
        }
    </div>

这是我的文件夹,我需要保存表格中的数据

这里显示的文件是我直接添加的

如何直接从表中获取文件

这是我的下载表

这里的 Url 列是带有扩展名的文件的名称,我需要将此 Url 获取到应用程序中的文件夹 myFiles。如何从表中获取文件?谁能帮我找到解决方案,如何工作?

【问题讨论】:

  • 使用Server.MapPath与保存文件的目录路径和从DB获取的文件名(假设正在使用EF,您可以通过BankEntities.Downloads.Where(...).Select(x =&gt; x.Url)查询,例如Server.MapPath("~/MyFiles" + model.Url)
  • 但是我没有在 action 参数中传递 id 来给出 where 子句。它如何才能正常工作?
  • 在表中你只有文件名。那么文件实际存在于哪里?它是否存在于管理项目中并且您想将其保存在您的另一个主网站项目中?
  • 是的。管理员广告该文件,并且还希望将其保存在另一个应用程序的文件夹中,供用户使用。但我不知道如何将其保存在文件夹中

标签: sql-server asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

您应该通过映射到其服务器路径来定义您的文件路径。 在您的操作中,您可以这样做:

public ActionResult Index()
    {
        var Downloads = db.Downloads.ToList();
        Downloads.ForEach(x=>{
           x.Url =  Server.MapPath(Url.Content("~/MyFiles/" + x.Url));
        });
        return View(Downloads);
    }

在您的视图方面,您可以简单地给出 Url :

@model List<ThaniyamBank.Models.Download>
<div class="row">

        @foreach (var item in Model)
        {
            <div class="col-lg-8 col-md-8 col-sm-8 col-xs-12 form_cont">
                <p class="all_sub_hed">@item.ItemName</p>
                <p class="tet">@item.Description</p>
                <a href="@(item.Url)" class="hvr-icon-back">Download Form</a>
            </div>
        }
    </div>

【讨论】:

  • 虽然给出的是代码,但出现List&lt;Download&gt; does not contain definition foe Foreach and no extension method accepting first argument of type 'List&lt;Download&gt;' could be found之类的错误,为什么会出现这个错误??
  • 你需要通过using System.Linq;导入System.Linq
  • 但它没有下载,也没有产生错误。我使用断点检查并注意到 Url 显示了整个路径。我只需要文件名?当我点击下载时,它没有下载。为什么?
  • 是的,它返回完整的 url 路径,因此您无需在视图部分指定完整的 url。你可以这样做:&lt;a href="@(item.Url)" class="hvr-icon-back"&gt;Download Form&lt;/a&gt;
  • 我正在获取路径但它没有通过单击链接下载并且没有将数据从表中保存到文件夹中??
【解决方案2】:

首先,您需要更改您的TableURL 列。它应该包含您的管理项目中 PDF 文件的完整目录路径,并为文件名添加另一列。

在您的操作方法中,只需从表中检索数据并将其传递给视图。

public ActionResult Index()
{
   var Downloads = db.Downloads.ToList();
   return View(Downloads);
}

在您的视图中,将文件 URL 绑定到另一个操作链接:

@model List<ThaniyamBank.Models.Download>
<div class="row">

@foreach (var item in Model)
    {
        <div class="col-lg-8 col-md-8 col-sm-8 col-xs-12 form_cont">
            <p class="all_sub_hed">@item.ItemName</p>
            <p class="tet">@item.Description</p>
            <a href="@@Url.Action("SaveFile", "Download"), new { FilePath = @item.Url, FileName = @item.FileName })" class="hvr-icon-back">Download Form</a>
        </div>
    }
</div>

在您的 SaveFile 操作方法中:

public ActionResult SaveFile(string FilePath, string FileName)
{
     using(WebClient client = new WebClient())
     {
        client.DownloadFile(FilePath , Server.MapPath(Path.Combine("~/MyFiles/", FileName));
     }
}

WebClient

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多