【问题标题】:Return binary data along with additional information返回二进制数据以及附加信息
【发布时间】:2013-09-11 02:39:29
【问题描述】:

我正在从服务器请求一个文件,使用file_get_contents 读取它并将该数据发送到客户端。是否可以将附加信息(如文件 ID)与图像二进制数据一起发送?

我正在使用 Flash 播放器来显示此图像。有一个选项可以使用 flash loader object 并使用 url 加载图像,但这意味着所有图像都必须是公开的,我想将它们保密。

【问题讨论】:

  • 如何将数据发送给客户端?客户用它做什么?也许您可以将元数据添加为响应标头,或者将响应以 JSON 格式发送(例如 {name: 'test.jpg', data: '<binary or base64'd data>'})。你能添加一些关于你的程序的更多信息吗?根据客户对响应的处理方式,可能还有其他解决方案。
  • 我更新了问题。我正在使用 Flash 播放器来显示图像。我从file_get_contents 获得的数据也是我打算传回的数据。此函数将文件作为字符串返回。
  • “我想让他们保密”是什么意思?
  • 我不希望任何人只浏览到mysite.com/img/test.jpg 其他人可以开始猜测文件名等。这些文件应该是私有的。所以我想我可以调用 PHP 脚本来验证文件 ID 是否属于用户。然后它将从磁盘读取文件并将图像数据发送回。

标签: php flash actionscript


【解决方案1】:

这是与客户端或直接浏览器客户端的 Ajax 会话,还是其他什么?

如果是普通浏览器,不知道为什么需要 get_file_contents 只是链接文件并将 ID 等文件信息添加到 html 中很简单

如果是 Ajax,您可以将文件信息格式化为预先确定的长度字符串,附加到文件内容中,并将其全部作为一个数据块发送。 然后,客户端可以剥离已知长度的前置字符,以单独访问文件信息和内容或使用数十种其他方法中的任何一种

我认为你需要澄清这个问题

添加:

要解决保持文件私密性的问题,您可以尝试将文件复制到临时文件夹中,这会增加服务器负载,但可能会解决您的问题。例如,使用 mysite.com/workfiles/userid_12345678_img_randombit.jpg 代替 mysite.com/img/test.jpg ........ 跟踪表中的文件并在一段时间后删除它们......工作,但可能会解决您的隐私问题

【讨论】:

  • 只是阅读我无法发布的其他答案和讨论 - 所以在这里发表评论。
  • 要解决保持文件私密性的问题,您可以尝试将文件复制到临时文件夹中,虽然服务器负载很大,但可能会解决您的问题。例如,使用 mysite.com/workfiles/userid_12345678_img_randombit.jpg 代替 mysite.com/img/test.jpg ........ 跟踪表中的文件并在一段时间后删除它们......工作,但可能会解决您的隐私问题
  • 这就是我目前拥有的。现在我需要返回文件数据以及一些元数据。我发现了一些关于将元数据附加到 jpeg 图像而不是 png 或 gif 的帖子。
【解决方案2】:

可以拨打exiftool 吗?您可以设置一个键:值。在这里查看 png 和 gif... http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/PNG.html#TextualData http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/GIF.html

【讨论】:

    【解决方案3】:

    我认为您可以使用“Content-Disposition”HTTP 标头。我不知道如何在 PHP 中完成,但在 .NET 中,您可以执行以下操作(也许您可以弄清楚如何翻译成 PHP):

        this.Response.Clear();
    
        this.Response.ContentEncoding = Encoding.UTF8;
        this.Response.Buffer = true;
    
        this.Response.ContentType = "application/octet-stream";
        this.Response.AddHeader("Content-Disposition", "attachment; filename=filename.txt");
    
        Response.Write(_buffer);
        Response.End();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多