附件上传-入库篇

接上一篇:http://lz726.iteye.com/blog/1882265

 

开发架构是struts+spring的。 DAO层就是用spring的jdbctemplate

大对象用了LobHandler,用这个东西问题也蛮多。

因为附件大小没有做限制,可能很大,所以采取流的方式。但是LobHandler 处理流的方式,网络上都找不到例子,就算找到了,也是不能用的,头大了。

界面上传进来的流,不懂为什么不能直接用LobHandler 入库,最后做了转换可以实现。代码如下:

 

		final InputStream stream=(InputStream)cform.getValue("stream");
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		byte[] bytes =new byte[10240];
		int length=0;
		while ((length = stream.read(bytes)) != -1) {
			baos.write(bytes, 0, length);
		}
		baos.flush();
		final InputStream bais=new ByteArrayInputStream(baos.toByteArray());
		
		ireturn=jdbcTemplate.execute(sql.toString(),new AbstractLobCreatingPreparedStatementCallback(lobHandler){ 
	              protected void setValues(PreparedStatement pstmt,LobCreator lobCreator){  
	                 try { 
	                    	pstmt.setString(1, id);
							          lobCreator.setBlobAsBinaryStream(pstmt,7,bais,bais.available());
						} catch (SQLException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} catch (Exception e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
	               }
	      });

 

 

配置

	<bean id="lobHandler"  class="org.springframework.jdbc.support.lob.DefaultLobHandler"  lazy-init="true"> </bean> 
 		

 

直接读取文件的,就可以。

 

    final File file = new File("d:\\a.jpg");
		LobHandler lobHandler = new DefaultLobHandler(); 	
		final InputStream input = new FileInputStream(file);	
		final String filesize=String.valueOf(file.length());
		ireturn=jdbcTemplate.execute(sql.toString(),new AbstractLobCreatingPreparedStatementCallback(lobHandler){ 
	              protected void setValues(PreparedStatement pstmt,LobCreator lobCreator){  
	                 try { 
	                    	pstmt.setString(1, id);
							          lobCreator.setBlobAsBinaryStream(pstmt,7,input,(int)file.length());
						} catch (SQLException e) {
							e.printStackTrace();
						} catch (Exception e) {
							e.printStackTrace();
						}
	               }
	      });

 

 

现在还不知道,在不同中间件下是否有问题,是否支持tomcat以外的,开发环境是tomcat的没问题。

 

 

现在想来,所有问题都是可以解决的,只要是问题。相信吧~

 

 

### 如何部署 Qwen-Agent 以实现 RAG(检索增强生成)功能 #### 部署环境准备 为了成功部署 Qwen-Agent 并启用 RAG 功能,需先配置好运行环境。这包括安装必要的依赖项和设置基础架构。具体来说,可以参考官方文档[^2]中的说明完成以下操作: - **Python 版本**: 确保使用 Python 3.8 或更高版本。 - **虚拟环境**: 推荐创建独立的虚拟环境以隔离项目依赖。 - **依赖包管理**: 使用 `pip` 安装所需库文件。 ```bash pip install qwen-agent ``` 此命令会自动拉取 Qwen-Agent 的核心组件及其依赖项[^2]。 --- #### 向量数据库集成 RAG 技术的核心在于向量化存储与高效检索机制。因此,在实际部署过程中需要引入合适的向量数据库服务。以下是常见的选项及其实现方式: 1. **Milvus/Zilliz Cloud** Milvus 是一种高性能分布式向量搜索引擎,能够轻松处理大规模数据集并支持实时查询需求。可以通过 Docker 快速启动实例[^3]: ```dockerfile docker run -d --name milvus \ -p 19530:19530 \ -p 9091:9091 \ zilliz/milvus:v2.3.0 ``` 2. **ChromaDB** Chroma 提供了一种轻量级解决方案,特别适用于中小型应用场景下的嵌入式开发模式。其 API 设计友好且易于集成到现有工作流当中[^4]。 --- #### 构建私有知识库 在具备了底层设施之后,则要着手建立专属的知识体系以便后续利用。这一环节通常涉及以下几个方面的工作内容: - 文档预处理:将原始资料转换成统一格式(如纯文本),便于进一步分析处理; - Embedding 计算:借助预训练好的语言模型提取每文档的关键特征表示形式; - 数据入库:把计算所得的结果批量导入至选定的目标存储系统之中; 这些流程均可通过编写脚本来自动化执行从而提高效率[^1]。 --- #### 自定义 Prompt 工程设计 针对特定领域内的复杂问题求解场景下,合理优化提示模板显得尤为重要。通过对输入信息结构化重组以及引导性描述增加等方式可以让模型更好地理解意图进而给出更精准的回答[^5]。 例如当面对多轮对话情境时可采用如下策略: ```json { "role": "user", "content": "请根据我的公司年报总结财务状况" } ``` 同时附加相关背景材料链接或者上传附件等形式提供更多辅助线索给AI助手参考决策之用。 --- #### 测试验证效果评估 最后一步就是进行全面的功能测试确保整个系统的稳定可靠运作状态良好。可以从不同角度出发比如准确性、响应速度等方面来进行综合考量判断是否达到预期目标要求水平之上再考虑上线推广事宜[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值