0

サーバーの Z:/File ディレクトリからファイルを表示する作業をしています。問題は、PDF および JPEG/JPG ファイルが localhost の Iframe 内で正しくレンダリングされる一方で、IIS サーバーの IP 名 192.168.xxx.xxx:8081/Home.aspx を使用するとレンダリングされないことです。ユーザーがファイルをダウンロードできるダウンロードボタンもあります。Iframe とダウンロード ボタンは同じソースを指していますが、Iframe はファイルを正しく返したり表示したりしません。空白が表示されるだけです。

ソース URL の例: \192.168.xxx.xxx\Z$\File Directory\PDF Files\cyber.pdf。

ああ、ところで、私はそれらを Iframe にマッピングし、ボタンを動的にダウンロードします。

protected string GetPath(TreeNode treenode)
    {
        string[] array = new string[100];
        string path = string.Empty;
        int depth = treenode.Depth;
        TreeNode node = new TreeNode();
        node = treenode;
        array[0] = node.Value;

        for (int i = 1; i <= depth; i++)
        {
            array[i] = node.Parent.Value;
            node = node.Parent; ;
        }

        //path = "~/";
        path = @"\\192.168.3.12\Z$\";

        for (int i = depth; i >= 0; i--)
        {
            if (Path.GetExtension(array[i].ToString()) == string.Empty)
            {
                //path += array[i].ToString() + "/";
                path += array[i].ToString() + @"\";
            }
            else
                path += array[i].ToString();
        }

        return path;
    }

protected void trvNews_SelectedNodeChanged(object sender, EventArgs e)
    {
        try
        {
            if (trvNews.SelectedNode.Expanded == true)
            {
                trvNews.SelectedNode.Collapse();
                trvNews.SelectedNode.Selected = false;
            }
            else if(trvNews.SelectedNode.Expanded == false)
                trvNews.SelectedNode.Expand();

            if (trvNews.SelectedNode.ChildNodes.Count == 0)
            {
                if (Path.GetExtension(trvNews.SelectedNode.Text) == string.Empty)
                {
                    hfPath.Value = GetPath(trvNews.SelectedNode);
                    //ListDirectory(trvNews, Server.MapPath(hfPath.Value), "NoChild");
                    ListDirectory(trvNews, hfPath.Value, "NoChild");
                    Session["Count"] = "Enabled";
                }
                else
                {
                    string test2 = Path.GetFullPath(hfPath.Value);
                    string path = hfPath.Value + trvNews.SelectedNode.Text;
                    //site = "DocumentViewer.aspx?=" + Path.GetFileName(path);
                    string url = "DocumentViewer.aspx?=" + Path.GetFileName(path);
                    Session["Path"] = path;
                    //ClientScript.RegisterStartupScript(typeof(Page), "Sigma", "open_win()", true);
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), "newpage", "open_win('" + url + "');", true);
                    Session["Count"] = "Enabled";
                }
            }
            string test = Session["Count"].ToString();

            if (Session["Count"].ToString() == "Enabled")
                btnBack.Visible = true;
        }
        catch (Exception ex)
        {
            LogError(ex, "User");
        }
    }

これは、ユーザーがファイルをクリックして表示/ダウンロードしたときの最初のページのコードです。次のページは..

protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!IsPostBack)
            {
                string path = Session["Path"].ToString();
                int length = path.Length;
                lblHead.Text = Path.GetFileName(path);
                System.IO.FileInfo file = new System.IO.FileInfo(Session["Path"].ToString());

                if (Path.GetExtension(path) == ".pdf")
                {
                    pnlPdf.Visible = true;

                    if (Session["FromNews"] != null)
                        framePdf.Attributes["src"] = FormulatePathPDFNews(path);
                    else
                    {
                        framePdf.Attributes["src"] = "\\\\" + file.FullName;
                    }
                }
                else if (Path.GetExtension(path) == ".jpeg" || Path.GetExtension(path) == ".jpg")
                {
                    pnlJpeg.Visible = true;
                    //imageJpeg.Attributes["src"] = FormulatePath(path);
                    imageJpeg.Attributes["src"] = file.FullName;
                }
            }
        }
        catch (Exception ex)
        {
            LogError(ex, "User");   
        }
    }

このためのダウンロード ボタンは次のとおりです。

protected void btnDownload_Click(object sender, EventArgs e)
    {
        try
        {
            if (Path.GetExtension(Session["Path"].ToString()) != null)
            {
                System.IO.FileInfo file = new System.IO.FileInfo(Session["Path"].ToString());
                if (file.Exists)
                {
                    Response.Clear();
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
                    Response.AddHeader("Content-Length", file.Length.ToString());
                    Response.ContentType = "application/octet-stream";
                    Response.WriteFile(file.FullName);
                    Response.End();
                }
                else
                    Response.Write("This file does not exist.");
            }
        }
        catch (Exception ex)
        {
            LogError(ex, "User");
        }
    }

localhost では問題なく動作していますが、IIS サーバーでは表示されません。任意のヒント?

4

1 に答える 1

0

ほとんどの場合、これはパスが見つからないか、フォルダーに必要なアクセス許可を示しています。

サイトは特定のユーザー (アプリケーション プールの ID を参照) の下で実行され、そのユーザーにはフォルダーへのアクセス許可が必要です。

于 2013-07-23T05:32:03.723 に答える