在新的浏览器窗口/选项卡中打开上载的PDF文件

时间:2012-02-10 07:00:34

标签: c# asp.net

在我目前的项目中,我需要打开一个由用户上传的PDF文件。我的aspx页面上有一个文件上传控件和一个上传按钮。用户单击“上载”按钮后,应立即保存该文件并在新窗口中打开。

我尝试使用客户端功能执行此操作:

        <script type="text/javascript">
           function openPDF() {
           alert('The file is open.');
           window.open('Open PDF.aspx','PDF');
           return true;
          }
       </script>

但是“打开PDF.aspx”页面是空白的。

打开PDF.aspx.cs文件如下所示:

        protected void Page_Load(object sender, EventArgs e)
        {
             string fullFileName = Session["fullFileName"].ToString();
             WebClient client = new WebClient();
             Byte[] buffer = client.DownloadData(fullFileName);

             if (buffer != null)
             {
                  Response.ContentType = "application/pdf";
                  Response.AddHeader("content-length", buffer.Length.ToString());
                  Response.BinaryWrite(buffer);
             }
       }

完整文件路径和文件名在BtnUpload_Click事件中构造,该事件是服务器端事件,并在客户端函数之后执行。 如何将完整文件路径作为会话或查询字符串传递给“打开PDF.aspx”页面?

如果还有其他方法可以实现这一点,那么请提出你的想法。感谢!!!

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

  • 通过ajax post call
  • 将上传的文件保存在服务器上
  • ajax调用完成后,可能会返回显示刚刚上传的文件的网址
  • 然后使用window.open(url)(例如pdf.aspx?id = [some_id_or_name])

在pdf.aspx中,您应该在本地加载文件,并通常使用适当的标头将其传输到客户端。

答案 1 :(得分:0)

如果您在“打开PDF.aspx”上传递文件名,它将无效, 因为您的上传操作将在“Open PDF.aspx”打开后执行。

您可以在BtnUpload_Click evet上将文件保存到服务器,然后注册客户端脚本以打开已保存的文件。