繁体   English   中英

如何将C#中的二进制字节数组另存为PHP中的文件?

[英]How to save binary byte array from C# as file in PHP?

在C#(ASP.NET MVC)中,我具有打开一个文件并将所有文件内容放入字节数组的方法,如下所示:

byte[] bytes = File.ReadAllBytes(filename);

在PHP方面,我有从C#调用的PHP Slim Framework API方法,并且我执行了一个包含此文件字节数组的POST JSON对象->它具有以下属性:

  • myObjectId-int-我的对象的ID
  • 文件名-字符串-文件名
  • fileBytes-数组-此文件的字节数组

您可以在此处获取此JSON内容的演示: https : //justpaste.it/1d8jq

在PHP方面,我对收到的内容执行json_decode,如下所示:

$fileObject = json_decode($app->request->getBody());

我在成员中得到了相同的字节数组:

$fileBytes = $fileObject->fileBytes;

现在的问题是如何将这个字节数组保存到Word文件(这是一个Word文件)中。 我使用了这种方法,它可以保存,但是里面有一些非常奇怪的内容/奇怪的符号(不是原始内容)...

$binStr = '';
foreach ($fileBytes as $fileByte) 
{
  $binStr .= pack('i', $fileByte);          
}
$binStr .= "\n";
$fileTemp = '/tmp/'.$filename;
file_put_contents($fileTemp, $binStr);

那么,如何正确保存这些字节(该字节数组在PHP中与C#一样具有相同的元素/整数-看起来已正确发送)?

如果这很重要,则C#部分在Windows Server上,PHP在Linux / CentOS服务器上。

似乎您有一个简单的字节数组作为整数,因此可以不使用pack而是使用chr 使用一些array_map魔术,可以这样写。

$fileObject = json_decode($app->request->getBody());
$data = implode(array_map('chr', $fileObject->fileBytes));
file_put_contents('/tmp/' . $fileObject->filename, $data);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM