2013-07-23 22 views
0

我与显示来自服务器的Z文件的工作:/文件目录。问题是,当PDF和JPEG/JPG文件在本地主机的Iframe内正确呈现时,当我使用IIS服务器IP名称192.168.xxx.xxx:8081/Home.aspx时,它们不呈现。我也有一个下载按钮,用户可以在其中下载文件。 Iframe和下载按钮指向相同的源,但Iframe不会正确返回/显示文件。它只是显示空白。PDF和JPEG文件不会在iframe中显示,但可在本地主机

这里是源URL的一个例子:\ 192.168.xxx.xxx \ Z $ \文件目录\ PDF文件\ 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"); 
     } 
    } 

他们正在努力在本地主机完全正常,但在IIS服务器时不显示。有小费吗?

+0

是否IIS下运行的网站有权限的网络目录的帐户和它的文件吗? – Sethcran

+0

如何在IIS中设置权限?我设定目录被所有人看到只是为了测试这个想法。但它仍然是一样的。文件无法显示。 –

回答

0

大部分的时间,这将表明该路径无法找到或所需的文件夹权限。

该网站将特定的用户下运行(看看在应用程序池身份),该用户将需要对文件夹权限。

+0

我真的很抱歉,因为我刚才一直在使用IIS。我只是对这些想法不熟悉。无论如何,网站一直在使用的池的身份是LocalSystem。 是的,通常它返回一个错误,找不到路径。但是当我看到这个陈述时,那里的路径并不是我映射到Iframe的路径。它将返回“C:\ inetpub \ wwwroot \ 192.168.xxx.xxx \”,然后返回该文件的URL,即\\ 192.168.xxx.xxx \ Z $ \ File Directory等。我想我可能做了一些错误的映射网址? –

+0

您不能将Url映射到文件夹路径,除非它位于网站文件夹结构中,您将需要通过http处理程序或类似服务来提供该文件。 –

+0

我该怎么做? –

相关问题