【问题标题】:Php use move_uploaded_file() from json data structurephp 使用来自 json 数据结构的 move_uploaded_file()
【发布时间】:2021-09-01 10:34:33
【问题描述】:

我通过 json 角度请求接收数据,但我没有 ($_FILES['name']['tmp_name']) 格式,所以我不能使用 move_uploaded_file()

WEB Json 数据

avatar  {
contentType "application/pdf"
data    "data:application/pdf;base64,JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhlcy1DTykgL1N0cnVjdFRyZWVSb290IDMxIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4vTWV0YWRhdGEgMjMyIDAgUi9WaWV3ZXJQcmVmZXJlbmNlcyAyMzMgMCBSPj4NCmVuZG9iag0KMiAwIG9iag0KPDwvVHlwZS9QYWdlcy9Db3VudCA0L0tpZHNbIDMgMCBSIDE3IDAgUiAyMiAwIFIgMjYgMCBSXSA+Pg0KZW5kb2JqDQozIDAgb2JqDQo8PC9UeXBlL1BhZ2UvUGFyZW50IDIgMCBSL1Jlc291cmNlczw8L1hPYmplY3Q8PC9JbWFnZTUgNSAwIFIvSW1hZ2U3IDcgMCBSPj4vRXh0R1N0YXRlPDwvR1M2IDYgMCBSL0dTMTAgMTAgMCB…Dg5NiAwMDAwMCBuDQowMDAwMzU4MDc2IDAwMDAwIG4NCjAwMDAzNTgxMjIgMDAwMDAgbg0KdHJhaWxlcg0KPDwvU2l6ZSAyMzUvUm9vdCAxIDAgUi9JbmZvIDMwIDAgUi9JRFs8MDlEM0VCOEI1NzE4NTg0MEIxMjA3MkEyMUM2RkNEOTg+PDA5RDNFQjhCNTcxODU4NDBCMTIwNzJBMjFDNkZDRDk4Pl0gPj4NCnN0YXJ0eHJlZg0KMzU4ODcyDQolJUVPRg0KeHJlZg0KMCAwDQp0cmFpbGVyDQo8PC9TaXplIDIzNS9Sb290IDEgMCBSL0luZm8gMzAgMCBSL0lEWzwwOUQzRUI4QjU3MTg1ODQwQjEyMDcyQTIxQzZGQ0Q5OD48MDlEM0VCOEI1NzE4NTg0MEIxMjA3MkEyMUM2RkNEOTg+XSAvUHJldiAzNTg4NzIvWFJlZlN0bSAzNTgxMjI+Pg0Kc3RhcnR4cmVmDQozNjM3MzINCiUlRU9G"
filename    "manualversion1.pdf"
size    363915
}
descripPretensiones "gsdfgfgdfdgf"
fecFin  "2021-06-17T05:00:00.000Z"

PHP

在这部分我没有任何尝试捕获的响应,没有错误或问题,但我的文件永远不会上传到我的文件夹


    $data = json_decode(file_get_contents('php://input'), true);
    $fileName= $data["avatar"]["filename"];
    
    try {
        if(move_uploaded_file(base64_decode($data['avatar']['data']), $finalRute)){
                echo 'file update';
        }
    } catch (Exception $e) {
        echo 'Excepción capturada: ',  $e->getMessage(), "\n";
    } 

【问题讨论】:

  • 首先$data["avatar"]["data"]不是文件而是字符串。所以你必须先用file_put_cotents()创建文件,然后用rename()复制它。 move_uploaded_file 仅适用于存在于 $_FILES 中的上传文件
  • 我认为data:application/pdf;base64, 部分仅用于在<img src 中显示。我认为您不希望在文件中包含该内容。

标签: php json angular


【解决方案1】:

您在内存中已将数据编码为 base64。您将不得不做一些事情来将数据写入磁盘,而不是使用 move_uploaded_file,后者旨在将磁盘上的临时文件移动到不同的位置。最直接的方法是file_put_contents

类似:

file_put_contents($finalRute, base64_decode(explode(',', $data['avatar']['data'])[1]));

根据 AbraCadaver 的 cmets 编辑的关于省略 data:application/pdf;base64, 的代码

【讨论】:

  • 我认为data:application/pdf;base64, 部分仅用于在<img src 中显示。我认为您不希望在文件中包含该内容。
  • 我相信@AbraCadaver 在这里是正确的。 base64_decode 应该在我之前的代码上失败,而不会爆炸。
猜你喜欢
  • 2016-06-09
  • 2020-10-17
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
相关资源
最近更新 更多