mercredi 12 octobre 2016

PHP Decoded Base64 PDF Upload To CMIS Server

I am developing a REST API using Laravel 5.1 that has use case as following: receive a base 64 decoded PDF, and return a workspace ID of a Document Management System (DMS) from the uploaded file. The DMS service that I use in this case is Alfresco.

Current Condition

The application succeed to receive base 64 string and decode it to a file. I store the decoded file into system temporary directory, and try to upload it to the Alfresco. I have previously built function that receive a file from a form request to be stored in the Alfresco, and it works. Here is the declaration and parameters stated in the function:

public static function uploadDocument(
    $doc,               // <-- Okay by form request, not okay by the API decoded file
    $user,              // credential
    $password,          // credential
    $params = array()   // array that contains ACE
    )
{

However, when I tried to use the same function with different document source, it failed. By different document source, I mean the source comes from the decoded base 64, and can be seen as follow:

    // Decrypt base64
    $fileData = base64_decode($request->input('file'));

    // Save the decoded file to a temp directory
    $tmpDir = sys_get_temp_dir();
    $fileName = $request->input("fileName");
    $pdfFile = fopen("$tmpDir/$fileName", 'w');
    fwrite ($pdfFile, $fileData);

    // Upload the decrypted file to the Alfresco
    $alfUsername = Config::get('alfresco.CMIS_BROWSER_USER');
    $alfPassword = Config::get('alfresco.CMIS_BROWSER_PASSWORD');
    $assignees = ['assignees' => []];
    $alfObjId = Alfresco::uploadDocument(
        $pdfFile,
        $alfUsername,
        $alfPassword,
        $assignees
    );

    fclose ($pdfFile);

The Error

Call to a member function getClientOriginalName() on resource

That refers to this line:

$uniqueFileName = $alfresco
    ->getUniqueFileName([
        'path' => $path,
        'filename' => $doc->getClientOriginalName(), // <-- This line
        'session' => $session
    ]);

Error screenshot

The Question

  1. Can one uploads a decoded base 64 file to another service without using temporary file?
  2. How can I convert the decoded file into a multipart form request or similar, in order that my upload function could consume?

Thank you.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire