java file upload BLOB
根据提供的文件信息,我们可以归纳出以下相关知识点: ### 1. 使用 Java 进行文件上传至数据库 BLOB 字段 #### 知识点说明: 在Java Web开发中,经常需要处理用户上传的文件,比如图片、文档等。这些文件通常比较大,如果直接将文件的内容作为字符串保存在数据库中,可能会导致数据库性能下降。因此,通常会采用二进制大对象(BLOB)的方式来存储较大的二进制数据。 #### 代码示例解析: 在提供的代码片段中,可以看到两个主要的方法:`getApplya` 和 `addSecurityChecks`。 - **`getApplya` 方法**: - 此方法用于从数据库中读取特定记录中的 BLOB 数据(本例中为图片),并将其返回给客户端。 - 通过 `ConnBean.getConn()` 获取数据库连接。 - 接着,执行 SQL 查询语句,该语句根据传入的 `documentno` 参数查询相应的 BLOB 数据。 - 如果查询成功并且存在结果,则获取 BLOB 对象,并通过 `getBinaryStream()` 方法将 BLOB 转换为 InputStream。 - 将读取的数据写入到客户端输出流中,完成图片的显示。 - **`addSecurityChecks` 方法**: - 此方法用于向数据库中插入新的记录,包括图片在内的各种数据。 - 同样地,通过 `ConnBean.getConn()` 获取数据库连接。 - 准备一个 SQL 插入语句,其中包含了多个字段,包括一个名为 `JPGUPLOAD` 的 BLOB 字段。 - 使用 `PreparedStatement` 设置参数值,对于 BLOB 类型的字段,使用 `setBlob` 方法设置为空的 BLOB 对象。 - 执行插入操作,并关闭数据库连接。 #### 注意事项: - 在处理 BLOB 数据时,需要注意资源管理,确保所有打开的输入输出流和数据库连接都被正确关闭。 - 当使用 Oracle 数据库时,需要引入 Oracle 的 JDBC 驱动,并且在处理 BLOB 对象时需要导入 `oracle.sql.BLOB` 类。 - 为了提高效率和安全性,可以考虑使用事务来保证数据的一致性。 ### 2. 处理图片上传和显示的技术细节 #### 技术细节解析: - **图片上传**: - 在实际应用中,用户上传的图片通常先保存在服务器端的临时文件夹中。 - 然后,将图片文件的内容读取到内存中,并通过 JDBC 的 `setBlob` 方法保存到数据库的 BLOB 字段中。 - 图片的上传可以通过 HTML 表单结合 Java Servlet 或其他框架如 Spring MVC 来实现。 - **图片显示**: - 在显示图片时,首先需要从数据库中读取 BLOB 数据。 - 将 BLOB 数据转换为 InputStream,并将其写入到 HTTP 响应的输出流中,以实现图片的显示。 - 为了提高用户体验,可以对图片进行适当的缓存处理。 #### 总结: 通过以上分析,我们可以了解到在 Java Web 开发中如何处理图片的上传与显示。这不仅涉及到基本的数据库操作,还需要掌握文件上传的相关技术以及如何处理二进制数据。同时,还需要注意优化程序性能,确保系统的稳定性和安全性。
private void getApplya(HttpServletRequest request,HttpServletResponse response){
ResultSet result = null;
Object doucmentno=null;
Connection conn = ConnBean.getConn();
BufferedInputStream inputimage=null;
BufferedImage image;
PreparedStatement pstmt = null;
String sql = "select JPGUPLOAD from SE_SECURITYCHECKS_RECORD where DOCUMENTNO='"+request.getParameter("documentno")+"' ";
Logger.getLogger(getClass()).debug(sql);
try {
pstmt = conn.prepareStatement(sql);
result=pstmt.executeQuery();
if(result.next()){
oracle.sql.BLOB blob = (oracle.sql.BLOB)result.getBlob("JPGUPLOAD");
inputimage = new BufferedInputStream(blob.getBinaryStream());
}
OutputStream sos =response.getOutputStream();
byte [] buf = new byte [10240*1024];
int len=0;
while( (len=inputimage.read(buf))!=-1){
sos.write(buf, 0 ,len);
}
- oneoneoneSeven2014-04-29很好用,谢谢分享~
- shenfeng25071609222016-11-19只有一个java文件真坑
- 粉丝: 3
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助