我正在开发一个 Web 服务,用户可以在其中输入参数并可以选择以各种文件格式(xml、html(在屏幕上)、csv 等)返回数据。
如果服务器生成文件内容(因此没有实际文件),则返回文件的 URL 不是一种选择。那么如何做到这一点呢?我知道有 xml 属性表明元素中的数据是二进制的,但这不会触发浏览器将数据下载为文件。
Content Disposition
XML/Web 服务有什么等价物吗?
在一个非常相关的说明上:
javascript/AJAX 可以触发浏览器下载文件吗?我知道仅 js 无法“生成”文件(从某种意义上说,浏览器会将字符串下载为具有给定文件名的文件)但是如果 ajax 函数调用脚本并且脚本回复有标题设置为下载?
我将尝试最后一部分,但想知道那里是否已经有任何可靠的信息。
更多细节:
首先,感谢所有回复的人。所有的答案都非常有帮助和教育意义。
我想我可能会尝试对这种情况进行更多解释,以将所有跨越答案的评论/担忧/建议联系起来。
我管理一个内部员工网站的项目。该项目主要处理进度查看和修改。至少有 4 个不同的 PHP 脚本查询 MySQL DB 以获取基本相同的数据。查询根据上下文略有不同。在一种情况下,它会提取按任务分组的每日时间表,在另一种情况下,它会查询整周的时间表并按人分组。在另一种情况下,它只查询一个人的每周日程安排。在某些情况下,它会输出数据,例如每人或每天或每个职位的小时总数,而在其他情况下,它只提供存储在数据库中的数据。
我开始对项目的某些方面感到内疚。显然,我可以将大量数据提取合并到一个包含的脚本中。我可能应该使用面向对象的 PHP 来处理结果。而且我更专注于解决这个问题,而不是确保数据安全可靠,并且确保数据库上的压力最小化和优化。我什至不确定如何真正知道查询是否已优化。
除了上面提到的内疚之外,我真的开始感到困惑了。在试图整理东西时,我发现自己陷入了一个结中,一个解决方案将一些工作正常的东西搞砸了。
所以,我认为一个好的解决方案是创建一个 Web 服务,它可以简化整个过程并迫使我对如何获取数据有一个逻辑(甚至是一个 API),并且对于任何试图当我最终不是首席开发人员时接管。此外,对于站点后端的升级和转移(有一天它可能在使用 Cold Fusion 的 Windows 服务器上,但我一想到我不寒而栗),以及可能想要连接的其他软件,这将使整个事情更加便携与数据库。
但问题是:
这个项目的整个起源是基于这样一个事实,即我们之前的调度解决方案是上传由我们使用的非常昂贵的企业级调度软件生成的非常丑陋和非语义的 HTML 报告。对于这个可怕的 HTML 报告和生成它的软件,我们遇到的第一个问题是没有.ics
可以导入 Outlook 或 Google 日历的“icalendar”文件的选项。我的个人使命是想办法将那些糟糕的报告转换成 ics 文件,从而开始我为什么开始学习 PHP、regex 和 MySQL 的故事。
因此,如果您还没有感到无聊和睡着,我认为 Web 服务是简化和简化调度过程的最佳选择,但如果我最终不得不使用普通的 PHP/MySQL 来获取数据中最有价值的部分(日历文件)然后我倾向于放弃整个事情并继续解开结。
顺便说一句,我确实理解使用 Web 服务的脚本可以创建 ics 文件,并且当用户请求时可以简单地避免使用 AJAX。再次感谢所有让我更清楚这一点的人。我只希望 Web 服务在其末端尽可能处理 DB 返回的所有内容,以便在 HTML/JS/PHP 和数据库之间有一种清晰的分区感。
再次感谢!