网页调用.gdc格式GDC快捷方式启动ERP报404问题咨询
问题产生原因
你遇到的404错误和.gdc文件本身是否可用无关,核心是Web服务的资源响应逻辑和本地操作系统的文件执行逻辑是完全独立的两套机制:
- 服务器本地双击
.gdc能启动,是因为服务器本地操作系统已经做了后缀名和GDC程序的关联,直接调用本地程序打开文件,完全不经过Web服务 - 网页里通过
href访问返回404,是Web服务层面没有正确返回这个文件资源,常见诱因有三个:.gdc文件没有放在Web服务配置的静态资源可访问目录下,服务没有权限读取该路径的文件- Web服务没有配置
.gdc后缀对应的MIME类型,会默认将未知后缀的请求判定为不存在资源,直接返回404 href填写的资源路径和文件实际存放路径不匹配,比如相对路径层级错误、文件名大小写和实际文件不一致
可行实现方案
方案1:静态资源托管方案(最易维护)
- 先修复资源访问问题
- 将导出的
.gdc快捷方式文件放到网页对应的Web服务静态资源根目录下,比如Nginx的html目录、IIS的站点发布目录、前后端服务的public静态资源文件夹 - 给Web服务新增
.gdc后缀的MIME配置,类型值设为application/gdc:- IIS:进入站点的「MIME类型」功能,新增扩展名
.gdc,对应MIME类型填写上面的值即可 - Nginx:在站点配置的对应
location块中添加types { application/gdc gdc; },重载Nginx配置生效 - Apache:在站点根目录的
.htaccess文件中添加AddType application/gdc .gdc配置
- IIS:进入站点的「MIME类型」功能,新增扩展名
- 配置完成后,直接在浏览器地址栏输入
.gdc文件的完整访问地址,测试是否能正常触发文件响应,能正常下载说明资源路径配置正确
- 将导出的
- 再优化点击启动体验
默认配置下浏览器会触发文件下载,不会直接唤起客户端,需要补充两个配置:- 给
.gdc文件的响应头添加Content-Disposition: inline,告知浏览器不要强制弹出下载保存框,优先尝试调用本地关联程序打开 - 确保所有同事的电脑安装GDC客户端时,已经完成
.gdc后缀和GDC程序的默认关联(GDC默认安装会自动配置关联,如果被安全软件拦截篡改,手动补做文件关联即可)。配置完成后点击网页上的链接,浏览器会直接唤起本地GDC客户端启动ERP,不需要手动再点下载的文件。
- 给
方案2:前端内嵌方案(无需配置服务端MIME)
如果不方便修改Web服务的MIME配置,可以直接把.gdc文件的内容转成base64编码内嵌到网页中,点击按钮时直接在前端生成对应格式的文件触发唤起,完全不依赖服务端静态资源配置,参考实现代码:
<button onclick="launchERP()">启动ERP系统</button> <script> function launchERP() { // 将本地.gdc文件内容读取后转为base64字符串,替换下方占位内容 const gdcContentBase64 = '替换为你的.gdc文件对应的base64字符串'; const binaryStr = atob(gdcContentBase64); const uint8Array = new Uint8Array(binaryStr.length); for (let i = 0; i < binaryStr.length; i++) { uint8Array[i] = binaryStr.charCodeAt(i); } const blob = new Blob([uint8Array], {type: 'application/gdc'}); const objectUrl = URL.createObjectURL(blob); const tempLink = document.createElement('a'); tempLink.href = objectUrl; tempLink.download = 'erp-start.gdc'; tempLink.click(); URL.revokeObjectURL(objectUrl); } </script>
注意:所有现代浏览器都有安全沙箱限制,不允许网页直接访问用户本地磁盘的绝对路径文件,不要在
href里写类似C:\Users\xxx\Desktop\xxx.gdc的本地路径,这类写法完全无效。
内容的提问来源于stack exchange,提问作者Jack_fu
相关产品推荐
相关产品推荐

