如何使通过 REST api GET 请求接收的 base64 编码文件可供下载



所以我通过 REST api GET 请求接收文档,该请求返回包含 base64 编码数据的文件的 JSON 以及有关文件的元数据,例如文件名和描述。

下面是返回的 JSON 示例(为了便于阅读,实际的 base64 数据替换为"BASE64 编码文件"(:

"documents":[  
    {  
        "name":"Job Description.doc",
        "description":"Job Description",
        "data":"BASE64 ENCODED FILE"
    },
    {  
        "name":"Person Description.doc",
        "description":"Person Description",
        "data":"BASE64 ENCODED FILE"
    }
]

我知道我可以json_decode()数据,然后执行以下操作:

file_put_contents('/path/to/file/'.base64_decode($documents->data));

这样做的问题是文件随后被永久存储(在这种情况下是不可接受的(。我想知道是否有任何方法可以提供文件以供下载,而无需将其作为文件存储在任何地方。也许与将 base64 编码图像用作图像标签的来源的方式类似。

你有什么想法?这能做到吗?

看起来你在服务器上使用了php。

据我了解:

    您的
  1. 访问者客户端/浏览器向您的服务器发出请求,
  2. 您的服务器运行一些 php 代码并向另一台服务器发起 REST 请求,
  3. 您的服务器收到 json 数据,以响应您的 REST 请求,
  4. 您的php代码将响应发送到访问者客户端/浏览器(或完成响应(,
  5. 或者,您的 php 代码在发送响应后会执行一些操作。

问题是,在该过程结束时,您必须将文档内容保存在某个地方或将其传输到访问者客户端/浏览器。否则,您的服务器会丢失它(并且,除了某些特殊情况外,我宁愿避免多次执行传递文件内容的 REST HTTP 请求(。

在数据丢失之前,将所有文件在响应中传输给您的访问者是可能的。一种方法如下:

  1. 您的访问者点击链接(在您的服务器上发起 REST 请求...
  2. 作为回应,您的访问者会收到一个下载(例如zip文件或tar.bz2...(。

另一种可行的方法是将包含所有文件内容的 HTML 内容发送到您的浏览器,并对其进行编码。然后客户端代码将完成剩余的工作。我不确定我是否会这样做,但你可以看看 https://stackoverflow.com/a/3916267/1106814

但是,除非我有特殊条件,否则我宁愿将文件内容暂时"保存"在服务器上。有多种方法可以得到可接受的解决方案:

  • 使用 cron 机制清除过期内容
  • 使用 tmpfs(或类似(解决方案来增加临时文件甚至未写入物理磁盘的可能性
  • 可能还有许多其他方式...

我希望能提出有用的想法。

最新更新