swf在flash里面正常显示。本地打开无法访问的问题(读本地config文件)

本文介绍了一种解决SWF文件在直接打开时出现错误的方法。通过使用Flash Player创建一个EXE播放器文件,可以正常访问本地配置文件和其他SWF资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个flv在flash发布后,一切运行正常。

但是直接打开swf出错。这种情况的前提是访问本地其他文件。比如config.xml,或者其他swf文件。

 

解决办法,将swf用player打开,然后 文件——》创建播放器,创建一个exe文件,放在相应目录下。

 

点击打开。访问正常。问题解决。

<think>我们正在讨论的是在JSP页面中通过点击超链接(a标签)实现文件预览功能。根据用户提供的引用,我们可以总结出几种实现文件预览的方法,并针对不同类型的文件(如PDF、Word、Excel、PPT等)给出解决方案。 ### 解决方案概述 1. **PDF文件预览**:可以使用开源组件(如FlexPaper)将PDF转换为SWF格式,然后通过Flash播放器预览;或者直接使用浏览器的PDF预览功能(需要浏览器支持)。 2. **Office文件预览**:利用微软的在线预览服务,通过iframe嵌入在线预览链接。 3. **通用文件预览**:对于图片等可以直接在浏览器中预览的文件,可以直接使用a标签链接到文件路径,但要注意添加参数避免直接下载(如引用[2]中提到,对于图片,如果不加特定参数,浏览器会直接预览而不是下载)。 ### 具体实现步骤 #### 1. PDF文件预览 **方法一:使用FlexPaper(需要转换PDF为SWF)** 步骤: 1. 在服务器端将PDF文件转换为SWF格式(可以使用工具如pdf2swf)。 2. 在JSP页面中引入FlexPaper的JS和CSS文件。 3. 使用FlexPaper的Viewer来显示转换后的SWF文件。 示例代码: ```jsp <!-- 引入FlexPaper资源 --> <link rel="stylesheet" type="text/css" href="flexpaper/flexpaper.css" /> <script type="text/javascript" src="flexpaper/flexpaper.js"></script> <script type="text/javascript" src="flexpaper/flexpaper_handlers.js"></script> <div id="documentViewer" class="flexpaper_viewer" style="width:100%;height:500px"></div> <script type="text/javascript"> $('#documentViewer').FlexPaperViewer({ config: { SWFFile: 'path/to/converted/file.swf', // 转换后的SWF文件路径 Scale: 0.6, ZoomTransition: 'easeOut', ZoomTime: 0.5, ZoomInterval: 0.2, FitPageOnLoad: true, FitWidthOnLoad: false, FullScreenAsMaxWindow: false, ProgressiveLoading: false, MinZoomSize: 0.2, MaxZoomSize: 5, SearchMatchAll: false, InitViewMode: 'Portrait', RenderingOrder: 'flash,html', StartAtPage: '', ViewModeToolsVisible: true, ZoomToolsVisible: true, NavToolsVisible: true, CursorToolsVisible: true, SearchToolsVisible: true, WMode: 'window', localeChain: 'en_US' } }); </script> ``` **方法二:直接使用浏览器PDF预览(推荐)** 如果用户浏览器支持PDF预览(如Chrome),可以直接通过链接打开PDF文件。但要注意,如果PDF文件较大,加载可能会慢。 示例代码: ```jsp <a href="path/to/file.pdf" target="_blank">预览PDF</a> ``` 或者使用iframe嵌入: ```jsp <iframe src="path/to/file.pdf" width="100%" height="600px"></iframe> ``` 注意:如果PDF文件路径包含中文,需要确保Tomcat的URI编码设置为UTF-8(引用[4])。在Tomcat的`conf/server.xml`中,修改Connector配置: ```xml <Connector ... URIEncoding="UTF-8" /> ``` #### 2. Office文件预览(Word, Excel, PPT) 使用微软提供的在线预览服务(引用[3]): ```jsp <% // 假设文件存储在服务器上,并且可以通过公共URL访问 String fileUrl = "http://yourdomain.com/path/to/file.docx"; // 注意:必须是公共可访问的URL %> <iframe src='https://view.officeapps.live.com/op/view.aspx?src=<%=fileUrl%>' width='100%' height='600px' frameborder='1'></iframe> ``` #### 3. 图片预览 图片预览可以直接使用a标签链接到图片,但默认情况下,点击链接会在当前页面打开图片(即预览)。如果希望在新标签页打开,可以设置`target="_blank"`。 ```jsp <a href="images/example.jpg" target="_blank">预览图片</a> ``` 但是,根据引用[2],如果希望强制下载而不是预览,可以在图片链接后添加参数`?response-content-type=application/octet-stream`。反之,如果我们希望确保是预览,则不要添加此参数。 ### 通用方法:通过JavaScript实现预览(以图片为例) 我们可以通过JavaScript创建一个新窗口或者弹窗来预览文件。 ```jsp <a href="#" onclick="previewFile('path/to/file.jpg')">预览图片</a> <script> function previewFile(url) { // 打开一个新窗口显示文件 window.open(url, '_blank'); } </script> ``` ### 注意事项 1. **文件路径问题**:确保文件路径正确,且服务器有访问权限。 2. **中文路径问题**:如果路径包含中文,需要确保服务器URI编码设置为UTF-8(如Tomcat配置)。 3. **跨域问题**:如果使用微软的Office在线预览,文件必须是通过公网可访问的URL。如果文件本地服务器,需要确保该服务器可通过公网访问,或者使用内网穿透工具。 4. **安全性**:不要直接使用用户提供的文件路径,防止路径遍历攻击。 ### 总结 在JSP中通过a标签实现文件预览,主要根据文件类型选择不同的预览方式: - PDF:直接链接到PDF文件,利用浏览器内置预览功能,或使用FlexPaper(需转换)。 - Office文件:使用微软在线预览服务(需公网可访问)。 - 图片:直接链接到图片文件。 示例代码汇总: ```jsp <!-- PDF预览 --> <a href="path/to/file.pdf" target="_blank">预览PDF</a> <!-- Word预览 --> <% String wordUrl = "http://yourdomain.com/path/to/document.docx"; %> <a href="#" onclick="window.open('https://view.officeapps.live.com/op/view.aspx?src=<%=wordUrl%>', '_blank')">预览Word文档</a> <!-- 图片预览 --> <a href="path/to/image.jpg" target="_blank">预览图片</a> ``` ### 相关问题 1. 如何在JSP中实现文件上传并实时预览? 2. 如何解决文件预览时的跨域问题? 3. 除了微软的在线服务,还有哪些Office文件预览方案?</think>### JSP中通过a标签实现文件预览的解决方案 在JSP页面中通过a标签实现文件预览功能,需要根据文件类型采用不同的技术方案。以下是针对不同文件类型的实现方法: #### 📄 1. PDF文件预览 **方案一:浏览器直接预览(推荐)** ```jsp <a href="javascript:void(0)" onclick="window.open('${pageContext.request.contextPath}/files/document.pdf', '_blank', 'width=1000,height=700')"> 预览PDF </a> ``` **方案二:使用FlexPaper组件** ```jsp <!-- 引入FlexPaper资源 --> <script type="text/javascript" src="flexpaper/js/flexpaper.js"></script> <script type="text/javascript" src="flexpaper/js/flexpaper_handlers.js"></script> <a href="javascript:void(0)" onclick="$('#documentViewer').FlexPaperViewer({ config : { SwfFile : '${pageContext.request.contextPath}/converted/document.swf', Scale : 0.6 }})"> 预览PDF(FlexPaper) </a> <div id="documentViewer" style="width:100%;height:600px"></div> ``` *注:需要先用pdf2swf工具将PDF转换为SWF格式[^1]* #### 📊 2. Office文件预览(Word/Excel/PPT) ```jsp <% String fileUrl = "http://your-domain.com/files/document.docx"; // 必须是公共可访问URL %> <a href="javascript:void(0)" onclick="document.getElementById('officeFrame').src='https://view.officeapps.live.com/op/view.aspx?src=<%=fileUrl%>'"> 预览Office文档 </a> <iframe id="officeFrame" width="100%" height="600px" frameborder="0" style="display:none"></iframe> ``` *使用微软官方预览服务[^3]* #### 🖼️ 3. 图片预览 ```jsp <a href="javascript:void(0)" onclick="document.getElementById('previewImage').src='images/photo.jpg'; document.getElementById('imagePreview').style.display='block'"> 预览图片 </a> <div id="imagePreview" style="display:none"> <img id="previewImage" src="" width="100%"> </div> ``` #### 📑 4. 通用预览方案(弹出窗口) ```jsp <script> function previewFile(filePath) { var screenWidth = screen.availWidth; var screenHeight = screen.availHeight; var winOption = "left=0,top=0,width=" + screenWidth + ",height=" + screenHeight + ",toolbar=yes,menubar=yes,location=yes,status=yes,scrollbars=yes,resizable=yes"; window.open(filePath, '_blank', winOption); } </script> <a href="javascript:void(0)" onclick="previewFile('${pageContext.request.contextPath}/files/document.pdf')"> 通用预览 </a> ``` *适用于多种文件类型[^5]* --- ### ⚠️ 关键注意事项 1. **中文路径问题**:确保Tomcat配置了URI编码 ```xml <!-- conf/server.xml --> <Connector URIEncoding="UTF-8" ... /> ``` 否则中文路径文件可能无法预览[^4] 2. **安全控制**: ```jsp <% // 验证用户权限 if(user.hasPermission("file_view")) { %> <a href="preview.jsp?file=sensitive.doc">预览</a> <% } %> ``` 3. **移动端适配**: ```jsp <script> function mobilePreview(url) { if(/Android|webOS|iPhone|iPad/i.test(navigator.userAgent)) { window.open(url, '_blank', 'location=yes'); } else { // 桌面端预览逻辑 } } </script> ``` 4. **避免下载**:对于图片文件,不要添加`?response-content-type=application/octet-stream`参数,否则会触发下载而非预览[^2] --- ### 🌐 最佳实践推荐 1. **文件类型检测**: ```jsp <script> function previewByType(url) { var ext = url.split('.').pop().toLowerCase(); if(['jpg','jpeg','png','gif'].includes(ext)) { // 图片预览 } else if(ext === 'pdf') { // PDF预览 } else if(['doc','docx','xls','xlsx','ppt','pptx'].includes(ext)) { // Office预览 } else { // 通用预览 } } </script> ``` 2. **服务器端配置**:确保web.xml添加MIME类型支持 ```xml <mime-mapping> <extension>pdf</extension> <mime-type>application/pdf</mime-type> </mime-mapping> ``` 3. **性能优化**:大文件使用分页加载 ```jsp <!-- PDF.js示例 --> <iframe src="/web/viewer.html?file=/files/large.pdf" width="100%" height="600px"></iframe> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值