【发布时间】:2017-04-21 13:17:54
【问题描述】:
我喜欢使用 Laravel / Guzzle 从 API 获取文件。
$API_Conn = $factory->create(new Client(), MemoQWSAPI::FileManager());
$chunkSize = 500000;
$file_start = $API_Conn->call('BeginChunkedFileDownload', [[
'fileGuid' => $file_Guid,
'zip' => false,
]]);
$fileStream = fopen(storage_path('/app/MemoQWSAPI/test.xliff'), 'w');
$fileBytesLeft = $file_start->fileSize;
while($fileBytesLeft > 0){
$chunkBytes = $API_Conn->call('GetNextFileChunk', [[
'sessionId' => $file_start->BeginChunkedFileDownloadResult,
'chunkSize' => $chunkSize,
]]);
$write = fwrite($fileStream, $chunkBytes, $chunkSize);
$fileBytesLeft -= $chunkSize;
}
$res = $API_Conn->call('EndChunkedFileDownload', [[
'sessionId' => $file_start->BeginChunkedFileDownloadResult,
]]);
fclose($fileStream);
$API_Conn->call('DeleteFile', [[ // Export the file in to a Xliff File
'fileGuid' => $file_Guid,
]]);
我通过此调用从 API 获取文件:
$chunkBytes = $API_Conn->call('GetNextFileChunk', [[
'sessionId' => $file_start->BeginChunkedFileDownloadResult,
'chunkSize' => $chunkSize,
]]);
我用这个来保存文件:
$fileStream = fopen(storage_path('/app/MemoQWSAPI/test.xliff'), 'w');
fwrite($fileStream, $chunkBytes, $chunkSize);
fclose($fileStream);
问题是我没有从 API 获取任何数据。
我做错了什么?
【问题讨论】:
-
如果我们不知道 API,很难回答您的问题。 API 是否返回任何错误?您的代码似乎甚至没有检查来自 API 的错误消息。
-
有 3 个调用: 1. 'BeginChunkedFileDownload` -> 我有一个 SessionId 和 fileSize。 2.'GetNextFileChunk' -> 迭代 3.'EndChunkedFileDownload' -> 关闭。在 API 规范上是用 C# 编写的,我在 PHP 上复制了这段代码,但是使用 fwrite 从 2.Step 获取数据的方法没有得到任何数据。如果我像 fwrite 那样执行这段代码,给我一个错误:fwrite() 期望参数 2 是字符串,给定对象。
-
如果您收到来自
fwrite的错误,您应该调查$chunkBytes是什么类型。应该在API规范或者PHP类的文档中提到($API_Conn)
标签: php api laravel-5.3 fwrite guzzle