将 PDF 文件从 Web-App 写入 U 盘
Posted
技术标签:
【中文标题】将 PDF 文件从 Web-App 写入 U 盘【英文标题】:Write PDF files from Web-App to USB-Stick 【发布时间】:2016-11-21 07:59:00 【问题描述】:我担心这样做的可行性: 在预先配置的机器上,我将预先安装一个 Web 应用程序,旁边是一个 Apache 套件。 所以客户端和服务器是一样的!
在此 Web 应用程序中,用户可以拖放 PDF 文件到 USB 图标。 然后网络应用程序应该将拖放的 PDF 写入连接的 USB 棒。
我从来没有做过这样的事情(写入 USB),所以我很不安全。 而且我很清楚有关 javascript 和文件系统访问的浏览器限制,但是...
经过一番研究,我发现,可能有一些可能,并且 相关的(我是一个网络平台的人)解决方案:
使用 USB 权限制作一个“Chrome 应用程序”(这真的有效吗?) 使用 php 找到 USB 并写入它(在 Windows 下如何工作?) 使用一些 Flash 作为中间人(不是首选)现在我想知道:
-
有没有人对前面提到的可能性有一些好的经验?
有没有人做过类似的事情?它奏效了吗?你选择了哪条路?
我如何知道 USB 安装在哪个驱动器上?如何确定?
对于这个问题还有哪些其他可能的解决方案?
【问题讨论】:
文件应该保存在用户的USB还是服务器运行的USB上? 服务器将在机器上运行。这些文件将被写入更改/不同的 USB 记忆棒。每个用户都会获得一个 U 盘作为赠品。 服务器上运行的是什么技术?假设您在 USB 记忆棒要插入的同一台机器上运行服务器,您的服务器代码可以轻松访问文件系统。在不了解后端技术的情况下,您不太可能获得任何建议的代码。请记住,安全性是此类应用程序的一个大问题。由于人们可以将自己的 USB 记忆棒插入这台机器,除非您锁定机器上的权限,否则这可能会成为问题。 @mcgraphix:假设 USB 安全问题在这里不是问题。 U 盘将由受信任的员工提供。根据服务器技术,我想使用 PHP 或 JavaScript(Node)——这是后端常见的 Web 技术之一。 您可以使用任何服务器技术来完成此操作。如果使用 Javascript,您可以将 ExpressJS 用于您的 Web 应用程序框架 (expressjs.com),并且 NodeJS 有一个用于编写文件的内置模块 (nodejs.org/api/fs.html)。但是,如果您希望有人会为您提供完成整个项目的确切代码,您可能会发现没有人会这样做。尝试使用此处的建议解决您的问题,然后根据您遇到的任何障碍或问题发布具体问题。 【参考方案1】:您有一个网站(“客户端”用户界面)和一个后端服务器(“服务器端”)在同一台机器上运行。这为您提供了 2 个选项:
-
客户端:通过浏览器通过 HTTP GET 下载文件,并让用户选择保存位置。
服务器端:按照@mcgraphix 的建议,将 USB 交互构建到后端 (Node.js) 代码中。
在服务器端与 USB 交互提供了最大的灵活性。此外,您可以利用许多库。前往npmjs.org 并考虑以下 Node.js 服务器端包等:
usb-detection usb使用服务端方式,当用户在客户端完成拖拽动作后发起Webservice请求,并在服务请求的服务端(Express.js或类似)方法中实现USB交互。
【讨论】:
非常感谢您的回答,这让我对完成这项工作充满信心。你得到了赏金,因为 a) 你的第一个选择(它是创造性的简单),我什至没有想到 b) 与 Node.js 的相关性和c) 有用的链接和小概念段落。希望它真的和听起来一样好:)【参考方案2】:如果知道棍子的字母,那么从 PHP 编写文件将很简单
file_put_contents( 'E:\\folder\\file.pdf', $data );
更新
您可以将驱动器列表读取到下拉列表中,并允许用户选择要写入的默认驱动器
https://***.com/a/8210132/696535
【讨论】:
感谢您的回答。如果这在 PHP 中真的如此简单——我将在未来进行测试——我会为你提供另一个小赏金,只是为了你的答案的直截了当:)【参考方案3】:您的问题更多是架构问题,而不是特定于代码的问题。
您的网络应用程序(如果您坚持使用网络应用程序)应该有两个主要组件,一个可以给予任意命令的服务器端组件,以及一个客户端组件(使用XMLHttpRequest的javascript)可以向服务器端组件发出请求以执行所述任意命令。
所以你的服务器端组件,为你的网页提供服务的组件应该有一些服务器端代码,可以将你的 pdf 写入文件系统,它可能也应该生成 pdf 文件,而不是在网络浏览器上生成。
您使用哪种技术取决于您,无论是 PHP、.Net、Node.js 等...
一般要点是您需要一个处理 HTTP 请求的服务器端框架,在您的情况下,可能是来自客户端的包含编码 pdf 的 post 请求,并相应地响应。绑定一个特定的 http 路由来触发你的保存逻辑。
您的 http 发布 request 到服务器将包含您的 payload,它是特定路径的 pdf 文件,例如http://localhost/savepdf http 监听的技术栈(你需要配置它)
您的服务器端组件应读取传入数据,对其进行适当解码,然后发出文件系统请求将接收到的有效负载写入磁盘。
【讨论】:
您好丹尼尔,感谢您的回答。我很可能会坚持使用 Web-App,因为那是我最有经验的地方。话虽如此,路由或一般应用程序架构对我来说不是 Hocus Pocus —— 但 文件系统请求 部分是我缺乏了解且没有经验的地方。 这完全取决于您的服务器运行的操作系统(从您的问题来看,看起来像 Windows)以及您要使用的技术堆栈。例如,如果它是 C#.Net,您将使用 binarywriter 将内容写入磁盘。您需要做的就是选择要使用的技术,查看文档并查找有关文件系统操作的文档。以上是关于将 PDF 文件从 Web-App 写入 U 盘的主要内容,如果未能解决你的问题,请参考以下文章