繁体   English   中英

将图像从ASP.NET(C#)上载到Oracle 11g

[英]Uploading an image from asp.NET (C#) to Oracle 11g

我想将图像从asp.NET Web窗体(4.0)应用程序上传到Oracle 11g数据库。 最终,我还需要检索图像。

有人告诉我使用Blob类型,但是如果找到更好的解决方案,这可能会改变。

从前端角度来看,我正在使用asp.NET文件上载组件,非常适合选择文件的路径。

最好的解决方法是什么? 使用blob吗? 使用bfile的? 将图像上传到服务器上并仅存储路径?

假设您有一个带有BLOB列的名为IMAGES的表,则需要执行以下操作:

byte[] imageData = FileUpload1.FileBytes;

OracleCommand cmd = new OracleCommand("INSERT INTO IMAGES(PARENT_ID, IMAGE_DATA) VALUES(:1, :2)", connection);
cmd.Parameters.Add("1", OracleDbType.Int32, parentID, ParameterDirection.Input);
cmd.Parameters.Add("2", OracleDbType.Blob, imageData, ParameterDirection.Input);

cmd.ExecuteNonQuery();

更新 :在显示图像时,您主要需要了解HTML页面仅包含对图像的引用( <img src="ImageFromDatabase.ashx?id=1234"> ),并且图像本身由一个单独的请求。 以下示例使用通用处理程序

public void ProcessRequest (HttpContext context) {
    HttpRequest request = context.Request;
    int parentID = Int32.Parse(request.QueryString["id"]);

    OracleCommand cmd = new OracleCommand("SELECT * FROM IMAGES WHERE PARENT_ID = :1", connection);
    cmd.Parameters.Add("1", OracleDbType.Int32, parentID, ParameterDirection.Input);
    OracleDataReader reader = cmd.ExecuteReader();

    byte[] imageData = ((OracleBlob)reader["IMAGE_DATA"]).Value;
    context.Response.ContentType = "image/jpeg";
    context.Response.BinaryWrite(imageByte);
} 

我已经省略了应该在真实应用程序中添加的所有错误处理。

更新2:

如果您具有网格视图,则可以这样定义图像列:

<asp:Image ID="Image1" runat="server" ImageUrl='<%# "ImageFromDatabase.ashx?id=" + Eval("ImageID")%>'/>

最好是将图像上传到服务器上并存储路径。

你为什么问?

  1. 当今的OS拥有快速的文件系统,因此获取图像的速度将比从数据库提供服务快得多。
  2. 如果将图像存储在数据库中,则会给数据库增加不必要的压力。
  3. 由于图像位于文件系统上,因此您可以简单地使用路径代替服务来提供图像。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM