返回二进制数据以及附加信息
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();
【讨论】:
以上是关于返回二进制数据以及附加信息的主要内容,如果未能解决你的问题,请参考以下文章
Java 虚拟机原理Class 字节码二进制文件分析 一 ( 字节码文件附加信息 | 魔数 | 次版本号 | 主版本号 | 常量池个数 )