我正在使用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
]);
谢谢。
答案 0 :(得分:0)
嗯,确保您可以在不保存临时文件的情况下调用其他服务。如果文件已作为字符串存在于内存中,则可以使用curl发送将字符串作为数据发送的新请求。使用curl创建请求,您可以将内容类型标题设置为多部分表单数据