壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8181|回复: 8

从orcale数据库表的一个字段中读图片数据并显示?

[复制链接]
发表于 2006/10/19 09:42:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
wei913yi用户提问:

通过pl/sql 写了一个包,这个包呢可以成为orcale的erp请求成功后的网页输出。我们都知道通过程序可以根据请求的需要提取数据库中的信息,但是如果是图片我们应该怎么处理呢?注意:图片数据在数据库中的存储是的二进制数据而非图片路径.
发表于 2006/10/19 09:57:49 | 显示全部楼层
图片在以二进制流格式存储在Oracle数据库中,是以大对象方式进行存取的,据我所知,应该是要定义游标获得存储地址。
另外,在数据库中存储路径,在网页上显示图片的方式是可以,不知道lz用的是否是自定义的页面

[ 本帖最后由 skyczn 于 2006-10-19 10:03 编辑 ]
发表于 2006/10/19 10:19:03 | 显示全部楼层
版主 :
     您好 !
     我是在PL/SQL中以以下方式
procedure print_title is
begin
    FND_FILE.put_line(FND_FILE.OUTPUT,'<TABLE height="47" align="center">');
    FND_FILE.put_line(FND_FILE.OUTPUT,'<TR width="100%">');
    FND_FILE.put_line(FND_FILE.OUTPUT,'<TD CLASS="ZZ1" width=100% align=center style="WIDTH: 645pt" height=43>长安股份公司员工卡片</td>');
    FND_FILE.put_line(FND_FILE.OUTPUT,'</TR>');
    FND_FILE.put_line(FND_FILE.OUTPUT,'</TABLE>');
    FND_FILE.put_line(FND_FILE.OUTPUT,'<TABLE width="100%" border="1" cellpadding="4" cellspacing="0" bordercolor="#000000" style="border-collapse:collapse">');
   
    FND_FILE.put_line(FND_FILE.OUTPUT,'<TR class="tableHeaderfont">');
    FND_FILE.put_line(FND_FILE.OUTPUT,'<td><div class="tablabel" align="center">保险编号</div></td>');
    FND_FILE.put_line(FND_FILE.OUTPUT,'<td><div id="emp_num"></div></td>');
    FND_FILE.put_line(FND_FILE.OUTPUT,'<td><div class="tablabel" align="center">单    位</div></td>');
    FND_FILE.put_line(FND_FILE.OUTPUT,'<td colspan="2"><div id="org_name"></div></td>');
    FND_FILE.put_line(FND_FILE.OUTPUT,'<td><div class="tablabel" align="center">人员类别</div></td>');
    FND_FILE.put_line(FND_FILE.OUTPUT,'<td><div id="person_type"></div></td>');
    FND_FILE.put_line(FND_FILE.OUTPUT,'<td><div class="tablabel" align="center">档案所在区域</div></td>');
    FND_FILE.put_line(FND_FILE.OUTPUT,'<td><div id="dangan"></div></td>');
    FND_FILE.put_line(FND_FILE.OUTPUT,'<td rowspan="6" colspan="2"><div align="center"></div></td>');
    FND_FILE.put_line(FND_FILE.OUTPUT,'</TR>');
.......
在ERP的应用程序的请求中显示页面
然后用
....
      fill_data('emp_num',c_1.emp_num);               ----员工编号
      fill_data('emp_name',c_1.emp_name);             ----员工名称
      fill_data('org_name',c_1.org_name);
.....
方式动态填入信息的,
这些都是在PL/SQL中编译好的,然后在erp应用环境的请求中提交生成的页面


问题就是如果我要把orcale数据库中的图片信息提出来显示在这个页面上,怎么处理?这个图片信息是二进制流的,没有存储图片地址
发表于 2006/10/19 12:31:44 | 显示全部楼层
楼主 这个问题好象很复杂,很不可以在存储过程将图片存储在服务器上的某个路径下,再使用FND_FILE.OUTPUT写HTML代码,指向那个文件呢?
其他的兄弟姐妹呢,一起过来看看
发表于 2006/10/19 13:06:12 | 显示全部楼层

用PHP和MySQL保存和输出图片

给你找了一个文档,不知道对你是不是有帮助:
设置数据库
  我们通常在数据库中所使用的文本或整数类型的字段和需要用来保存图片的字段的不同之处就在于两者所需要保存的数据量不同。MySQL数据库使用专门的字段来保存大容量的数据,数据类型为BLOB。
  MySQL数据库为BLOB做出的定义如下:BLOB数据类型是一种大型的二进制对象,可以保存可变数量的数据。BLOB具有四种类型,分别是TINYBLOB,BLOB, MEDIUMBLOB 和LONGBLOB,区别在于各自所能够保存的最大数据长度不同。
  在介绍了所需要使用的数据类型之后,我们可以使用以下语句创建保存图象的数据表。
  CREATE TABLE Images ( PicNum int NOT NULL AUTO_INCREMENT PRIMARY KEY, Image BLOB );
编写上传脚本
  关于如何实现文件的上传,我们在这里就不再介绍了,感兴趣的读者可以参见“网页陶吧”内的相关文章。现在,我们主要来看一下如何接收上传文件并将其存入到MySQL数据库中。具体的脚本代码如下,其中我们假定文件上传域的名称为Picture。
<?
If($Picture != "none") {
$PSize = filesize($Picture);
$mysqlPicture = addslashes(fread(fopen($Picture, "r"), $PSize));
mysql_connect($host,$username,$password) or die("Unable to connect to SQL server");
@mysql_select_db($db) or die("Unable to select database");
mysql_query("INSERT INTO Images (Image) VALUES ($mysqlPicture)") or die("Cant Perform Query");
}else {
echo"You did not upload any picture";
}
?>
  这样,我们就可以成功的把图片保存到数据库中。如果在将图片插入MySQL的过程中出现问题,可以检查一下MySQL数据库所允许的最大数据包的大小。如果设置值过小的话,我们会在数据库的错误日志中找到相应的记录。
  下面,我们简单说明一下上述脚本程序。首先,我们通过“If($Picture != "none")”检查是否有文件被上传。然后,使用addslashes()函数避免出现数据格式错误。最后,连接MySQL,选择数据库并插入图片。
显示图片
  在知道了如何将图? 入数据库之后,我们就需要考虑怎样才能从数据库中取出图片并在HTML页面中显示出来。这个过程要稍微复杂一些,下面我们就来介绍一下实现过程。
因为PHP显示图片需要发送相应的标头,所以我们就会面临这样一个问题,那就是一次只能显示一副图片,因为我们无法在发出标头之后再发送其它的标头。
为了有效的解决这一问题,我们编写了两个文件。其中,第一个文件作为HTML页面的模板,定位图片的显示位置。第二个文件则被用来从数据库中实际输出文件流,作为<IMG>标签的SRC属性。
第一个文件的简单形式可以如下:
<HTML> <BODY>
<?
mysql_connect($host,$username,$password) or die("Unable to connect to SQL server");
@mysql_select_db($db) or die("Unable to select database");
$result=mysql_query("SELECT * FROM Images") or die("Cant Perform Query");
While($row=mysql_fetch_object($result)) {
echo "<IMG SRC=\"Second.php3? PicNum=$row->PicNum\">";
} ?>
</BODY> </HTML>
  当HTML页面被浏览时,每显示一副图片就会调用一次Second.php3文件。当第二个文件被调用时会传入相应的Picture ID,我们可以借此从数据库中取回对应的图片并显示。
Second.php3文件如下:
<?
$result=mysql_query("SELECT * FROM Images WHERE PicNum=$PicNum") or die("Cant perform Query");
$row=mysql_fetch_object($result);
Header( "Content-type: image/gif");
echo $row->Image;
?>
  到此,我们就介绍完了使用PHP和MySQL保存和显示图片的全过程。文中所举得都是一些最简单的实例,读者可以根据自己的实际需要加入其它一些功能,使整个程序更加完善。
发表于 2006/10/19 14:06:03 | 显示全部楼层

回复 #3 wei913yi 的帖子

用SQL保存和输出图片(你先看看,能够得到启示)

 有时候我们需要保存一些binary data进数据库。SQL Server提供一个叫做image的特殊数据类型供我们保存binary data。Binary data可以是图片、文档等。在这篇文章中我们将看到如何在SQL Server中保存和输出图片。

  建表

  为了试验这个例子你需要一个含有数据的table(你可以在现在的库中创建它,也可以创建一个新的数据库),下面是它的结构:

  Column Name

  Datatype

  Purpose

  ID

  Integer

  identity column Primary key

  IMGTITLE

  Varchar(50)

  Stores some user friendly title to identity the image

  IMGTYPE

  Varchar(50)

  Stores image content type. This will be same as recognized content types of ASP.NET

  IMGDATA

  Image

  Stores actual image or binary data.

  保存images进SQL Server数据库

  为了保存图片到table你首先得从客户端上传它们到你的web服务器。你可以创建一个web form,用TextBox得到图片的标题,用HTML File Server Control得到图片文件。确信你设定了Form的encType属性为multipart/form-data。

  Stream imgdatastream = File1.PostedFile.InputStream;

  int imgdatalen = File1.PostedFile.ContentLength;

  string imgtype = File1.PostedFile.ContentType;

  string imgtitle = TextBox1.Text;

  byte[] imgdata = new byte[imgdatalen];

  int n = imgdatastream.Read(imgdata,0,imgdatalen);

  string connstr=

  ((NameValueCollection)Context.GetConfig

  ("appSettings"))["connstr"];

  SqlConnection connection = new SqlConnection(connstr);

  SqlCommand command = new SqlCommand

  ("INSERT INTO ImageStore(imgtitle,imgtype,imgdata)

  VALUES ( @imgtitle, @imgtype,@imgdata )", connection );

  SqlParameter paramTitle = new SqlParameter

  ("@imgtitle", SqlDbType.VarChar,50 );

  paramTitle.Value = imgtitle;

  command.Parameters.Add( paramTitle);

  SqlParameter paramData = new SqlParameter

  ( "@imgdata", SqlDbType.Image );

  paramData.Value = imgdata;

  command.Parameters.Add( paramData );

  SqlParameter paramType = new SqlParameter

  ( "@imgtype", SqlDbType.VarChar,50 );

  paramType.Value = imgtype;

  command.Parameters.Add( paramType );

  connection.Open();

  int numRowsAffected = command.ExecuteNonQuery();

  connection.Close();

  从数据库中输出图片

  现在让我们从数据库中取出我们刚刚保存的图片,在这儿,我们将直接将图片输出至浏览器。你也可以将它保存为一个文件或做任何你想做的。

  private void Page_Load(object sender, System.EventArgs e)

  {

  string imgid =Request.QueryString["imgid"];

  string connstr=((NameValueCollection)

  Context.GetConfig("appSettings"))["connstr"];

  string sql="SELECT imgdata, imgtype FROM ImageStore WHERE id = "

  + imgid;

  SqlConnection connection = new SqlConnection(connstr);

  SqlCommand command = new SqlCommand(sql, connection);

  connection.Open();

  SqlDataReader dr = command.ExecuteReader();

  if(dr.Read())

  {

  Response.ContentType = dr["imgtype"].ToString();

  Response.BinaryWrite( (byte[]) dr["imgdata"] );

  }

  connection.Close();

  }

  在上面的代码中我们使用了一个已经打开的数据库,通过datareader选择images。接着用Response.BinaryWrite代替Response.Write来显示image文件。
发表于 2006/10/19 14:21:57 | 显示全部楼层
四海的帖子有所启发,楼主可以看看,不过还是要调用服务器指定路径下的文件
发表于 2006/12/29 17:58:14 | 显示全部楼层
把图片读出来放到一个路径下面去,然后在报表里引用这个路径的地址就可以了,我做过
发表于 2006/12/31 11:40:11 | 显示全部楼层
还是建议在数据库中存放路径数据,把图片文件放到服务器中比较好,省事
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 15:35 , Processed in 0.026397 second(s), 16 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表