0
votes

I recive the data by json angular request, but I don´t have ($_FILES['name']['tmp_name']) format, so i can´t use move_uploaded_file()

WEB Json data

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

In this part i dont have any response of try catch, no error o problem, but my file never is upload to my folder


    $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";
    } 
1
First of all $data["avatar"]["data"] is no file but a string. So you have to create the file first using file_put_cotents() and then just copy it with rename(). move_uploaded_file only works for uploaded files which are present in $_FILESCode Spirit
I think the data:application/pdf;base64, part is only for displaying in an <img src. I don't think you want that in the file.AbraCadaver

1 Answers

2
votes

You have the data encoded as base64 in memory. You will have to do something to write the data to disk instead of using move_uploaded_file, which is designed for moving a temp file on disk to a different location. The most straightforward would be file_put_contents.

Something like:

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

code edited per AbraCadaver's comments about omitting data:application/pdf;base64,