You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vaadin 7.7.3预览数据库存储文件失败:资源链接无法访问求助

Vaadin 7.7.3 文件预览问题修复方案

针对你遇到的文件预览链接无法访问的问题,可通过以下步骤排查修复:

1. 绑定StreamResource到当前应用会话

Vaadin 7中StreamResource需要关联当前UI的应用实例,否则资源路由会失效。修改资源初始化代码:

StreamResource resource = new StreamResource(() -> new ByteArrayInputStream(pgwApplicationData.getMobileFileContent()), pgwApplicationData.getMobileFileName());
// 绑定到当前UI所属的应用实例
resource.setApplication(getApplication());
// 禁用缓存,避免浏览器加载旧资源
resource.setCacheTime(0);

2. 调整Embedded组件配置

确保组件尺寸和模式设置合理,避免渲染异常:

Embedded pdf = new Embedded(messageEmbedder.getMessage("preenrollment.file.context") + ":", resource);
pdf.setMimeType("application/pdf");
pdf.setType(Embedded.TYPE_BROWSER);
// 设置适配布局的尺寸
pdf.setWidth("100%");
pdf.setHeight("600px");
firstLayout.setSizeFull();
firstLayout.addComponent(pdf);

3. 检查Vaadin Servlet路径配置

确认web.xml中Vaadin Servlet的url-pattern配置正确,比如设置为/APP/*时,生成的资源路径....web/APP/global/0/legacy/9/test_file.pdf才能被正确映射。若应用部署在子路径下,需同步调整Servlet的路径配置。

4. 备选方案:使用链接或下载按钮增强可用性

如果内嵌预览仍有问题,可添加直接跳转或下载选项,利用浏览器原生能力:

// 生成新窗口预览链接
Link previewLink = new Link("在新窗口预览", resource);
previewLink.setTargetName("_blank");
firstLayout.addComponent(previewLink);

// 添加下载按钮
Button downloadBtn = new Button("下载文件");
FileDownloader downloader = new FileDownloader(resource);
downloader.extend(downloadBtn);
firstLayout.addComponent(downloadBtn);

5. 排查浏览器安全限制

尝试在浏览器地址栏直接访问生成的资源链接,确认是否能正常加载。若无法访问,需检查应用域名配置是否存在跨域问题,或浏览器安全设置是否阻止了内嵌资源加载。

内容的提问来源于stack exchange,提问作者gonzay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:32:51