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 テラバイトのコンテンツ データをすべてサブフォルダーに保存できないことです。コンテンツはリモート サーバーに保存され、ドライブは 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 サイトの標準コンテンツ フォルダが非常に大きいため、Web サーバーではなく、別のデータ サーバーに格納するのが適切でないと想像してみてください。それが私が解決しようとしている問題です。

4

2 に答える 2

1

画像を返すアクション メソッドを作成できます。あなたはthを呼び出すことができます

[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

定義上、画像を保存しているサーバーが Web サーバーではない場合、Web サイトを閲覧する人はそれらにアクセスできません。あなたはウェブサーバーでサービスを提供したい!!!

したがって、解決策は次のとおりです。

1.) 「データ/画像」サーバーに Web サーバーをインストールしますが、画像のみを提供することを確認してください。

2.) 実際の Web サーバーでアクションを作成します。おそらく GetImage(String name) で、File("M:/Storage/" + name) を返します。この URL をイメージ ソースで使用します。

これは明らかに単純化されていますが、うまくいけばアイデアが得られますか? 画像を要求しているのはサーバーではなくブラウザであるため、画像のソースをローカル パスに設定することはできません。したがって、オプション 1 を使用してブラウザーが画像を取得できるようにするか、オプション 2 を使用して画像を Web に「渡す」必要があります。理にかなっていますか?

于 2016-12-12T16:38:00.740 に答える