C# 如何在图像框中向asp.net WebForm显示SQL Server中存储的pdf btye数组?

C# 如何在图像框中向asp.net WebForm显示SQL Server中存储的pdf btye数组?,c#,asp.net,sql-server-2008,asp.net-ajax,C#,Asp.net,Sql Server 2008,Asp.net Ajax,我正在开发一个web应用程序,因为我需要将图像文件和一些其他文档存储在数据库中,然后我必须将它们显示在网页上的图像框中。我在数据库中存储了图像,也以字节数组的形式存储了PDF文件,我使用了一个通用处理程序从数据库中获取字节数组,然后在图像框中显示它们。这对图像很好,但对PDF文件不起作用 public class ShowImage : IHttpHandler { public void ProcessRequest(HttpContext context) {

我正在开发一个web应用程序,因为我需要将图像文件和一些其他文档存储在数据库中,然后我必须将它们显示在网页上的图像框中。我在数据库中存储了图像,也以字节数组的形式存储了PDF文件,我使用了一个通用处理程序从数据库中获取字节数组,然后在图像框中显示它们。这对图像很好,但对PDF文件不起作用

public class ShowImage : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    { 
        Int32 imgID;
        if (context.Request.QueryString["id"] != null)
            imgID = Convert.ToInt32(context.Request.QueryString["id"]);
        else
            throw new ArgumentException("No parameter specified");

        context.Response.ContentType = "image/jpeg";
        byte[] buffer = ShowEmpImage(imgID);
        context.Response.BinaryWrite(buffer);
    }

    public Stream ShowEmpImage(int empno)
    {
        dbClass db = new dbClass();
        string sql = "SELECT imgfile FROM myFiles WHERE id = @ID";
        SqlCommand cmd = new SqlCommand(sql, db.con);
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@ID", empno);
        object img = null;
        try
        {
            db.Connect();
            img = cmd.ExecuteScalar();
        }
        catch
        {
            return null;
        }
        finally
        {
            db.Disconnect();
        }
        return new MemoryStream((byte[])img);
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

请指导我如何在图像框中显示PDF文件和其他文件?事实上,问题是我的应用程序与现有应用程序一起运行,无法存储文件扩展名,因此我可以显示文件的唯一方法是“将它们显示为图像”,但如果它们是更好的方法,请帮助我的朋友。

将其表示为图像时,PDF不起作用是有原因的。。。这不是图像。此外,声称它是
“image/jpeg”
会让它变得非常糟糕,除非浏览器执行显式的文件头检查,并且确实需要修复IMO。如果您当前没有存储文件名/扩展名/MIME/什么,那么坦率地说:这是一个需要修复的问题

对于显示PDF,我怀疑您需要使用
而不是
,因为a:可能无法在所有浏览器上工作,b:可能对调用方不太方便。就我个人而言,我只会提供一个下载链接(在处理程序中,使用
内容配置
告诉浏览器将其视为下载)。

谢谢@Marc Gravell 当我选择文件并点击一个按钮上传时,我会看到一个页面,就像VisualStudio关闭了一样,我想运行我的项目。诸如此类的事。 这是我用来保存PDF和图像文件的代码

string sql = "INSERT INTO uploadedfiles(name, srID, policy, date, LOGpdf, fileExtension) VALUES(@p, @d, @pol, @dt, @img, @extension) SELECT @@IDENTITY";

                db.Connect();
                SqlCommand cmd = new SqlCommand(sql, db.con);
                cmd.Parameters.AddWithValue("@p", txtName.Text);
                cmd.Parameters.AddWithValue("@d", txtSrID);
                cmd.Parameters.AddWithValue("@pol", lblPolicyID.Text);
                cmd.Parameters.AddWithValue("@dt", txtDate.Text);
                if (FileUpload1.HasFile)
                {
                    cmd.Parameters.AddWithValue("@img", imgByte);
                    cmd.Parameters.AddWithValue("@extension", extension);
                }
                int id = Convert.ToInt32(cmd.ExecuteScalar());
我在和我的朋友搜索和讨论,我们找到了这个,代码和这个帮助我,但是我的朋友说它只能上传100MB的文件

<location path="UploadFiles.aspx">
    <system.web>
        <httpRuntime executionTimeout="2040" maxRequestLength="104857600"/>
    </system.web>
</location>


在我的应用程序中,用户可能希望上传大小超过100MB的文件,在这种情况下,这也会崩溃

那么,告诉我如何在没有浏览器限制的情况下显示它?我需要在我的网页上同时显示图像文件或PDF文件,有什么更好的方式在网页上显示它们?@AqEeL如果您想显示PDF的图像,也许。否则;使用
并希望得到最好的答案谢谢您的帮助,但它不适用于我的场景。如果你有更具体的知识,那么告诉我我会的thankful@AqEeL没有具体的问题,所以很难给出具体的答案。但是“不要试图在
标签中显示PDF,这不会起作用”感觉非常具体。。。如果你的意思是你正在使用一个
,但没有更改内容类型,那么再次强调:“不要声称某个东西是jpeg,但发送pdf-这不起作用”感觉非常具体……在一天结束时,我已经这样做了。谢谢你的指导