【问题标题】:How to save binary byte array from C# as file in PHP?如何将 C# 中的二进制字节数组保存为 PHP 中的文件?
【发布时间】:2018-04-19 03:51:56
【问题描述】:

在 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 服务器上。

【问题讨论】:

    标签: php file binary save


    【解决方案1】:

    似乎你有一个简单的字节数组作为整数,所以不要使用pack,你可以只使用chr。使用一些array_map 魔法,可以这样写。

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

    【讨论】:

      猜你喜欢
      • 2018-04-28
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 2018-07-05
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多