小伙伴们有没有遇到过这样一个场景,两台设备之间只可以通过一个通讯软件进行通讯。软件只能发送图片,其他格式的文件是被限制下载的。如下面所示:
在这种情况下,一些小伙伴可能会想用修改文件后缀名的方式,将文件后缀名改成 png
、JPG
等格式。
有这种想法,对文件这个概念可能不太熟悉。
修改后缀名会修改文件的类型吗?
文件名及后缀名与文件里的内容无关,在 windows
中,后缀名只区分在你双击分件的时候,默认打开的方式。
严格来说,文件是没有类型的。在没有与程序关联前,文件里的内容就是一串编码字符,单独的一个文件是没有意义的。
通常的,一个被具有特定意义地文件,会有一套与之对应地程序对该文件地进行解析,例如,office
中的一个程序能够对 doc
、pdf
文件解析,视频播放器能够对MP4 等文件进行解析。
修改文件后缀名,文件里的内容并没有被改变。将本应是 doc
内容的文件使用播放器程序进行打开,视频播放器不能识别文件的内容,导致执行出错。
直接将文件后缀名修改成图片相关的后缀名( png
、jpg
等)行不通,是否可以将其他文件放到图片中呢?
这个还真的可以。
先看一下图片的内容长什么样子,使用 notepad++
开打图片文件:
图片文件有个特点是,在图片文件内容后面追加数据,如在 png
文件尾部 添加一些信息,再用图像工具打开该文件,是能够正确打开的。
因此可以将需要传输的文件追加到图片内容后。
现在我需要传输 context.zip
文件,可以将 content.zip
文件的内容,追加到carrier.png 文件后。
请不要直接将zip
文件的内容,复制到粘贴板,再粘贴到png
文件中!
由于编码格式等问题,得到的内容不一致,最终导致操作失败。
下图是直接从粘贴板复制粘贴过来的,可以看到内容已经发生了变化。
正确的做法是,使用命令行的方式:
# copy /b <file1> + <file2> <file3> 将file2 追加到file1后面,生成file3.
# 图片要放在file1的位置
$ copy /b carrier.png + content.zip oupt .png
可以看到这样复制过来的内容就是无误了,这样就可以将 zip
伪装成图片的形式传输过去了。
传输过去后,再将 output.png
中前面的内容删了,即是一个 zip
文件。(目前是 png
结尾,将 png
改成 zip
就默认以压缩工具打开 output.zip
了)
如果觉得有收获的话,就请作者喝杯咖啡吧!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。