0

风景:

<div class="project" style="background-image: url('@project.ProjectLogoPath')">

该模型:

public List<Projects> GetProjects() {
            DataContext dbContext = new DataContext();
            List<Projects> projects_list = new List<Projects>();
            foreach (Project p in dbContext.Projects) {
                Projects c = new Projects();
                c.ProjectName = p.p_name;
                c.ProjectNumber = p.p_num;
                c.CompanyName = p.co_name;
                c.ClientName = p.cl_name;
                c.ProjectLogoPath = "../../Storage/" + p.co_name + "/Clients/" + p.cl_name + "/" + p.p_num + "_" + p.p_name + "/99_Other/project_logo.png";
                projects_list.Add(c);
            }
            return projects_list;
        }

控制器:

public ActionResult Index() {
            ProjectsBAL b = new ProjectsBAL();
            List<Projects> c = b.GetProjects();
            ViewBag.ProjectsData = c;

            UserBAL u = new UserBAL();
            Users use = u.GetUser();
            ViewBag.Username = use.Username;
            ViewBag.Domain = use.Domain;
            ViewBag.Company = use.Company;

            return View("Index");
        }

这工作得很好。问题是我所有的 1000 TB 内容数据都无法存储在子文件夹中,内容将存储在远程服务器上,驱动器将安装到 IIS 服务器上,驱动器号为 M。我的问题是如何制作路径正确吗?关注点是这样的:

c.ProjectLogoPath = "../../Storage/" + p.co_name + "/Clients/" + p.cl_name + "/" + p.p_num + "_" + p.p_name + "/99_Other/project_logo.png";

我已经尝试过:

c.ProjectLogoPath = "M:/Storage/" + p.co_name + "/Clients/" + p.cl_name + "/" + p.p_num + "_" + p.p_name + "/99_Other/project_logo.png";

我也尝试用“\”替换所有“/”。还尝试在开始时使用“file://///”,这似乎只是偶尔起作用(例如,当我刷新页面时不起作用,但如果我按下主页按钮就会起作用)。

基本上,想象一下您网站的标准内容文件夹非常大,以至于不再适合将其存储在 Web 服务器上,而是存储在另一个数据服务器上。这就是我要解决的问题。

4

2 回答 2

1

您可以创建一个返回图像的操作方法。你可以打电话

[OutputCache(Duration = 600)]
public ActionResult GetImg(string companyName,string clientName,
                            string projectName,string projectNumber)
{
    var networkPath = @"M:/Storage/";
    var fileName = Path.Combine(networkPath, companyName);
    //Fix here as needed. I just glanced at your path :(
    fileName = Path.Combine(fileName, "/Clients");
    fileName = Path.Combine(fileName, clientName);
    fileName = Path.Combine(fileName, projectNumber+"_"+projectName);
    fileName = Path.Combine(fileName, "/99_Other/project_logo.png");
    return File(fileName, "image/png");
}

现在从您的角度来看,通过传递参数值来调用此方法。

<div class="project" style="background-image: url('@Url.Action("GetImg",
      new { companyName=project.CompanyName,clientName=project.ClientName,
      projectNumber = project.ProjectNumber,projectName=project.ProjectName})')"></div>
于 2016-12-12T16:53:34.937 回答
1

根据定义,如果您存储图像的服务器不是网络服务器,那么浏览您网站的人将无法访问它们,这确实是正确的,因为您不希望网络上提供所有东西,只有东西你想用一个网络服务器服务!!!

所以解决方案是;

1.) 在您的“数据/图像”服务器上安装一个网络服务器,但要确保它只提供图像。

2.) 在您的实际 Web 服务器上创建一个操作,可能是 GetImage(String name),然后执行返回 File("M:/Storage/" + name),然后在图像源中使用此 url

这显然是简化的,但希望能给你这个想法?您不能将图像的来源设置为本地路径,因为请求图像的是浏览器而不是服务器。因此,您需要使用选项 1 使浏览器能够获取图像,或使用选项 2 将图像“传递”到网络。说得通?

于 2016-12-12T16:38:00.740 回答