2017-04-21 79 views
0

我很想用Laravel/Guzzle從API獲取文件。從API獲取文件(Guzzle,Laravel,PHP)

$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。

我在做什麼錯了?

+1

如果我們不知道API,很難回答你的問題。 API是否返回任何錯誤?你的代碼甚至不會檢查來自API的錯誤消息。 – Matey

+0

有3個電話: 1.'BeginChunkedFileDownload' - >我得到了SessionId和fileSize。 2.'GetNextFileChunk' - >迭代 3.'EndChunkedFileDownload' - >關閉。 關於API Specs是在C#上編寫的,我在PHP上覆制了這些代碼,但是從2.step與fwrite獲取數據的方式並沒有獲取任何數據。 如果我執行這樣的代碼那樣的fwrite給我一個錯誤: fwrite()期望參數2是字符串,給定的對象。 –

+0

如果你有'fwrite'錯誤,你應該調查'$ chunkBytes'是什麼類型。應該在API規範或PHP類的文檔中提及('$ API_Conn') – Matey

回答

0

謝謝大家,但最後我發現了錯誤。

這是因爲API服務器自動創建名稱爲Test.xliff的文件,但在服務器上如何保存Test.xliff.dff89302a093s8402934a23948文件名+令牌。

無論如何謝謝你們所有人。