返回二进制数据以及附加信息

Posted

技术标签:

【中文标题】返回二进制数据以及附加信息【英文标题】: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 是否属于用户。然后它将从磁盘读取文件并将图像数据发送回。 【参考方案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();

【讨论】:

以上是关于返回二进制数据以及附加信息的主要内容,如果未能解决你的问题,请参考以下文章

153 - 获取历史任务实例变量的二进制数据

160 - 查询历史详情

8088/8086的存储器结构(微机原理笔记)

Java 虚拟机原理Class 字节码二进制文件分析 一 ( 字节码文件附加信息 | 魔数 | 次版本号 | 主版本号 | 常量池个数 )

CRC循环冗余校验

使用 swift POST 二进制数据