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
相关产品推荐
相关产品推荐

