如何在图像框中向asp.net WebForm显示SQL Server中存储的pdf btye数组
本文关键字:存储 SQL Server 数组 btye pdf 显示 net 图像 asp WebForm | 更新日期: 2023-09-27 18:26:35
我正在开发一个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在将其表示为图像时不起作用是有原因的它不是图像。此外,除非浏览器进行明确的文件头检查,并且确实需要修复IMO,否则声称它是"image/jpeg"
会让它变得非常糟糕。如果你目前没有存储文件名/扩展名/MIME/什么的,那么坦率地说:这是一个你需要修复的问题。
对于显示PDF,我怀疑您需要使用<iframe>
而不是<img>
,因为a:可能不适用于所有浏览器,b:可能对调用方不太方便。就我个人而言,我只提供一个下载链接(在处理程序中,使用content-disposition
告诉浏览器将其视为下载)。
谢谢@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的文件,在这种情况下,这也会崩溃。