将图像从asp.NET(C#)上传到Oracle 11g

时间:2012-07-16 07:58:40

标签: c# asp.net oracle11g

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

我被告知使用blob类型,但如果找到更好的解决方案,这可能会改变。

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

最好的方法是什么?使用blob的?使用bfile的?在服务器上传图像,只存储路径?

2 个答案:

答案 0 :(得分:4)

假设您有一个名为IMAGES且带有BLOB列的表,您将需要执行类似的操作:

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">),并且图像本身由单独的请求提供。以下示例使用 Generic Handler

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 :(得分:2)

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

为什么要问?

  1. 现代操作系统拥有快速的文件系统,因此获取图像的速度比从数据库提供的速度快得多。
  2. 如果将图像存储在数据库中,则会给数据库添加过度的压力。
  3. 由于图像在文件系统上,您只需使用路径,而不是服务来提供图像。