在本地驱动器中查看pdf?

时间:2016-09-22 08:11:25

标签: c# asp.net

在我的电脑中有一个文件夹,其中包含pdf文件,现在我想根据其名称显示它。我做了一些编码,也显示了pdf 。但在此之后,再次显示错误消息说"无法打开文件。文件格式为#34;

这是我的代码

 try
 {
      this.Response.ContentType = "application/pdf";
      this.Response.TransmitFile(FilePath+name);
      this.Response.End();
 }
 catch (Exception ex)
 {
     WebMsgBox.Show(ex.Message);
 }

1 个答案:

答案 0 :(得分:0)

如果您创建处理程序,请说" DownloadDoc.ashx",并使用此代码:

Option Infer On
Imports System.IO
Imports System.Web
Imports System.Web.Services

''' <summary>
''' Return a pdf document.
''' </summary>
''' <remarks></remarks>
Public Class DownloadDoc
    Implements System.Web.IHttpHandler

    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

        Dim srcDir As String = "~/pdfs"
        Dim fileType As String = ".pdf"

        Dim fname = context.Request.QueryString("name")
        Dim actualFile = Path.Combine(context.Server.MapPath(srcDir), fname & suffix) & fileType

        If File.Exists(actualFile) Then
            context.Response.ContentType = "application/octet-stream"
            context.Response.AddHeader("Content-Disposition", "attachment; filename=""" & Path.GetFileName(actualFile) & """")
            context.Response.TransmitFile(actualFile)

        Else
            context.Response.Clear()
            context.Response.TrySkipIisCustomErrors = True
            context.Response.StatusCode = 404
            context.Response.Status = "404 Not Found"
            context.Response.Write("<html><head><title>404 - File not found</title><style>body {font-family: sans-serif;}</style></head><body><h1>404 - File not found</h1><p>Sorry, that file is not available for download.</p></body></html>")
            context.Response.End()

        End If

    End Sub

    ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property

End Class

然后你可以使用普通的<a href="http://www.example.com/DownloadDoc.ashx?name=mypdf">

请注意,拥有&#34; .pdf&#34;强制扩展,以便不能破坏它从服务器下载任意文件。您还可以确保仅存在文件名,并且不存在启用目录遍历的任何内容,以防万一在服务器上未安全地设置文件权限。

设置context.Response.ContentType = "application/octet-stream"是您可以使浏览器提供下载文件而不是显示文件的最接近的地方。

编辑:哦,对不起,你想要C#。我相信你能够翻译上述内容。