PHP解码Base64 PDF上载到CMIS服务器

时间:2016-10-13 04:39:48

标签: php file-upload laravel-5 base64

我正在使用Laravel 5.1开发REST API,其用例如下:接收基本64解码的PDF,并从上传的文件返回文档管理系统(DMS)的工作区ID。我在这种情况下使用的DMS服务是Alfresco。

当前条件

应用程序成功接收base 64字符串并将其解码为文件。我将解码后的文件存储到系统临时目录中,并尝试将其上传到Alfresco。我以前构建的函数接收来自表单请求的文件存储在Alfresco中,它可以工作。以下是函数中声明的声明和参数:

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
    )
{

但是,当我尝试使用不同文档源的相同功能时,它失败了。通过不同的文档源,我的意思是源来自解码的基础64,可以看作如下:

    // 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);

错误

Call to a member function getClientOriginalName() on resource

指的是这一行:

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

Error screenshot

问题

  1. 可以在不使用临时文件的情况下将解码后的base 64文件上传到其他服务吗?
  2. 如何将解码后的文件转换为多部分表单请求或类似内容,以便我的上传功能可以使用?
  3. 谢谢。

1 个答案:

答案 0 :(得分:0)

嗯,确保您可以在不保存临时文件的情况下调用其他服务。如果文件已作为字符串存在于内存中,则可以使用curl发送将字符串作为数据发送的新请求。使用curl创建请求,您可以将内容类型标题设置为多部分表单数据