【问题标题】:How to show stored pdf btye array in SQL Server to asp.net WebForm in a image box?如何在图像框中将 SQL Server 中存储的 pdf 字节数组显示为 asp.net WebForm?
【发布时间】:2012-03-22 16:10:12
【问题描述】:

我正在开发一个 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 文件和一些其他文件?实际上问题是我的应用程序与现有应用程序一起运行并且无法存储文件的扩展名所以我可以显示文件的唯一方法是“将它们显示为图像”但如果它们是更好的方法然后帮助我朋友.

【问题讨论】:

    标签: c# asp.net sql-server-2008 asp.net-ajax


    【解决方案1】:

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

    为了显示 PDF,我怀疑您需要使用 <iframe> 而不是 <img>,这 a: 可能不适用于所有浏览器,并且 b: 可能对调用者不太方便。我个人只是提供一个下载链接(在处理程序中,使用content-disposition 告诉浏览器将其视为下载)。

    【讨论】:

    • 那么告诉我如何在不受浏览器限制的情况下显示它?我需要在我的网页上同时显示图像文件或 PDF 文件,有什么更好的方式在网页上显示它们?
    • @AqEeL 如果您想显示 PDF 的 图像,可能是 look here。否则;使用<iframe> 并希望最好
    • 感谢您的帮助,但它不适用于我的方案。如果您有更具体的知识,请告诉我,我将不胜感激
    • @AqEeL 没有具体的问题,所以很难给出具体的答案。但是“不要尝试在 <img> 标签中显示 PDF - 这不起作用”感觉非常具体......如果你的意思是你正在使用 <iframe> 但没有更改内容类型,那么再次:“不要声称某些东西是 jpeg,而是发送 pdf - 这行不通”感觉非常具体......
    • 在一天结束时我已经完成了这个。感谢您的指导
    【解决方案2】:

    感谢@Marc Gravell 当我选择文件并单击按钮上传时,我会进入一个页面,比如 Visual Studio 已关闭,我想运行我的项目。类似的东西。 这是我用来保存 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 的文件,在这种情况下,这也会崩溃。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-12
      • 2017-04-28
      • 2013-05-02
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      相关资源
      最近更新 更多