//接口
public InputStream loadInvoiceRider(String INVOICE_ID_); //实现层 @Override public InputStream loadInvoiceRider(String INVOICE_ID_) { String sql = "select RIDER_ from MP_INVOICE where INVOICE_ID_ = ?"; return mpJdbcTemplate.queryForObject(sql, new Object[] { INVOICE_ID_ }, new RowMapper<InputStream>() { public InputStream mapRow(ResultSet rs, int rowNum) throws SQLException { return rs.getBinaryStream(1); } }); }
//控制层 @RequestMapping(value = "loadInvoiceRider") public void loadInvoiceRider(String INVOICE_ID_, HttpServletRequest request, HttpServletResponse response, HttpSession session) { Map<String, Object> result = new HashMap<String, Object>(); try { getOperator(request, session); InputStream inputStream = invoiceService.loadInvoiceRider(INVOICE_ID_); response.reset(); ServletOutputStream out = response.getOutputStream(); byte[] content = new byte[65535]; int length = 0; if (inputStream != null) { while ((length = inputStream.read(content)) != -1) { out.write(content, 0, length); } } out.flush(); out.close(); log("admin", "InvoiceController.loadInvoiceRider", INVOICE_ID_, "0", null, request, session); } catch (Exception e) { logger.error(e.getMessage(), e); result.put("message", getErrorMessage(e, request)); result.put("success", false); StringWriter stringWriter = new StringWriter(); e.printStackTrace(new PrintWriter(stringWriter)); log("admin", "InvoiceController.loadInvoiceRider", INVOICE_ID_, "1", stringWriter.toString(), request, session); } }
前台直接把请求地址,放在图片的src位置
{ xtype : 'actioncolumn', width : 280, dataIndex : 'INVOICE_ID_', text : '<spring:message code="INVOICE" />', align : 'center', renderer : function(value, metaData, record) { var id = metaData.record.id; Ext.defer(function() { Ext.create('Ext.Img', { height : 140, width : 250, src : 'loadInvoiceRider.do?INVOICE_ID_=' + value, renderTo : id, listeners : { scope : this, el : { dblclick : function(e, a) { var winViewImage = Ext.create('Ext.Window', { width : 750, height : 500, maximizable : true,//窗体最大化按钮 title : '<spring:message code="image" />', layout : "fit", //窗口布局类型 modal : true, //是否模态窗口,默认为false resizable : false,//调整窗体大小 closeAction : 'hide', //关闭窗体实际上是隐藏窗体并未关闭销毁此窗体对象(节约资源) plain : true,//窗体主体部分背景颜色透明 draggable : true,//充许拖动窗体 border : false, items : [ Ext.create('Ext.Img', { width : 750, height : 500, src : 'loadInvoiceRider.do?INVOICE_ID_=' + value }) ] }); winViewImage.show(); } } } }) }, 50); return Ext.String.format('<div id="{0}"></div>', id); } },
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!