如何通过REST api GET请求获取base64编码文件可供下载

时间:2014-12-04 18:20:28

标签: json rest base64

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

以下是返回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编码图像如何用作图像标记的源类似。

你有什么想法?可以这样做吗?

1 个答案:

答案 0 :(得分:1)

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

根据我的理解:

  1. 您的访客客户端/浏览器向您的服务器发出请求
  2. 您的服务器运行一些php代码并向另一台服务器发起REST请求,
  3. 您的服务器收到了json数据,以响应您的REST请求,
  4. 您的php代码会将响应发送给您的访客客户端/浏览器(或完成响应),
  5. 可选地,您的PHP代码在发送响应后会执行一些操作。
  6. 问题是,在流程结束时,您必须已将文档内容保存到某处或将其传输到访客客户端/浏览器。否则它会丢失给您的服务器(除了在某些特殊情况下,我宁愿避免多次执行传递文件内容的REST HTTP请求。)

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

    1. 您的访问者点击链接(在您的服务器上发起REST请求...)
    2. 作为回复,您的访问者会收到一个下载(例如zip文件或tar.bz2 ...)。
    3. 另一种看似可行的方法是将HTML内容发送到您的浏览器,其中包含所有已编码的文件内容。然后客户端代码将完成剩余的工作。我不确定我是否这样做,但你可以查看https://stackoverflow.com/a/3916267/1106814

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

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

      我希望提供有用的想法。