Fix upload crash - remove undefined tryPostmanUpload method call
This commit is contained in:
parent
289d34bf2b
commit
079ae37ea5
1 changed files with 105 additions and 82 deletions
|
|
@ -39,14 +39,6 @@ class AssetUploader
|
|||
$filename = basename($filePath);
|
||||
$mimeType = mime_content_type($filePath);
|
||||
|
||||
// Try using actual Postman "Create Assets" request if TestRunner available
|
||||
if ($testRunner) {
|
||||
$postmanResult = $this->tryPostmanUpload($testRunner, $filePath, $folderId, $filename, $mimeType);
|
||||
if ($postmanResult !== null) {
|
||||
return $postmanResult;
|
||||
}
|
||||
}
|
||||
|
||||
// Get base URL from ApiClient using reflection
|
||||
$baseUrlReflection = new ReflectionProperty($this->apiClient, 'baseUrl');
|
||||
$baseUrlReflection->setAccessible(true);
|
||||
|
|
@ -74,34 +66,40 @@ class AssetUploader
|
|||
]
|
||||
];
|
||||
|
||||
// Build asset_representation
|
||||
if ($sourceMasterAsset) {
|
||||
// Use master asset's full metadata structure
|
||||
$assetRep = $this->buildAssetRepresentationFromMasterAsset($filename, $sourceMasterAsset);
|
||||
|
||||
$postFields = [
|
||||
'asset_representation' => json_encode($assetRep),
|
||||
'manifest' => json_encode($uploadManifest),
|
||||
'parent_folder_id' => $folderId,
|
||||
'files' => new \CURLFile($filePath, $mimeType, $filename)
|
||||
];
|
||||
} else {
|
||||
// No master asset - minimal representation (will likely fail)
|
||||
$minimalRep = [
|
||||
'asset_resource' => [
|
||||
'asset' => [
|
||||
'name' => $filename,
|
||||
'security_policy_list' => [['id' => 1594]]
|
||||
// Build asset_representation with error handling
|
||||
try {
|
||||
if ($sourceMasterAsset) {
|
||||
// Use master asset's metadata
|
||||
$assetRep = $this->buildAssetRepresentationFromMasterAsset($filename, $sourceMasterAsset);
|
||||
$assetRepJson = @json_encode($assetRep, JSON_THROW_ON_ERROR);
|
||||
} else {
|
||||
// No master asset - minimal representation
|
||||
$minimalRep = [
|
||||
'asset_resource' => [
|
||||
'asset' => [
|
||||
'name' => $filename,
|
||||
'security_policy_list' => [['id' => 1594]]
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
];
|
||||
$assetRepJson = @json_encode($minimalRep, JSON_THROW_ON_ERROR);
|
||||
}
|
||||
|
||||
$manifestJson = @json_encode($uploadManifest, JSON_THROW_ON_ERROR);
|
||||
|
||||
$postFields = [
|
||||
'asset_representation' => json_encode($minimalRep),
|
||||
'manifest' => json_encode($uploadManifest),
|
||||
'asset_representation' => $assetRepJson,
|
||||
'manifest' => $manifestJson,
|
||||
'parent_folder_id' => $folderId,
|
||||
'files' => new \CURLFile($filePath, $mimeType, $filename)
|
||||
];
|
||||
} catch (Exception $e) {
|
||||
return [
|
||||
'success' => false,
|
||||
'filename' => $filename,
|
||||
'error' => 'JSON encoding error: ' . $e->getMessage(),
|
||||
'http_code' => 0
|
||||
];
|
||||
}
|
||||
|
||||
// Get authorization header
|
||||
|
|
@ -113,8 +111,20 @@ class AssetUploader
|
|||
$authHeader = $headers['Authorization'];
|
||||
}
|
||||
|
||||
// Log auth status
|
||||
error_log("Upload: Auth header present: " . (!empty($authHeader) ? 'YES' : 'NO'));
|
||||
if (!empty($authHeader)) {
|
||||
error_log("Upload: Auth header starts with: " . substr($authHeader, 0, 20) . "...");
|
||||
}
|
||||
|
||||
// Use curl directly for multipart upload with extended timeout
|
||||
$ch = curl_init();
|
||||
|
||||
// Log before curl setup
|
||||
error_log("Upload: Setting up cURL for " . $filename);
|
||||
error_log("Upload: URL = " . $url);
|
||||
error_log("Upload: Folder ID = " . $folderId);
|
||||
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_URL => $url,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
|
|
@ -125,64 +135,77 @@ class AssetUploader
|
|||
'Authorization: ' . $authHeader
|
||||
],
|
||||
CURLOPT_SSL_VERIFYPEER => false,
|
||||
CURLOPT_TIMEOUT => 300, // 5 minutes
|
||||
CURLOPT_TIMEOUT => 60, // Reduce to 1 minute to fail faster
|
||||
CURLOPT_CONNECTTIMEOUT => 30
|
||||
]);
|
||||
|
||||
// Execute with error suppression to prevent crashes
|
||||
set_time_limit(300); // Give PHP 5 minutes
|
||||
$response = @curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$curlError = curl_error($ch);
|
||||
curl_close($ch);
|
||||
// Execute with error suppression and timeout handling
|
||||
try {
|
||||
set_time_limit(120); // 2 minutes max for PHP
|
||||
error_log("Upload: About to execute cURL");
|
||||
$response = @curl_exec($ch);
|
||||
error_log("Upload: cURL executed, got response");
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$curlError = curl_error($ch);
|
||||
curl_close($ch);
|
||||
|
||||
if ($curlError) {
|
||||
return [
|
||||
'success' => false,
|
||||
'filename' => $filename,
|
||||
'error' => 'CURL error: ' . $curlError,
|
||||
'http_code' => 0
|
||||
];
|
||||
}
|
||||
|
||||
if ($response === false) {
|
||||
return [
|
||||
'success' => false,
|
||||
'filename' => $filename,
|
||||
'error' => 'Upload request failed - no response received',
|
||||
'http_code' => 0
|
||||
];
|
||||
}
|
||||
|
||||
if ($httpCode == 201) {
|
||||
$responseData = json_decode($response, true);
|
||||
|
||||
return [
|
||||
'success' => true,
|
||||
'asset_id' => $responseData['asset_resource_list']['asset_resource'][0]['asset']['asset_id'] ?? null,
|
||||
'filename' => $filename,
|
||||
'http_code' => $httpCode
|
||||
];
|
||||
}
|
||||
|
||||
// Extract detailed error message from API response
|
||||
$errorMsg = 'Upload failed';
|
||||
if (!empty($response)) {
|
||||
$responseData = json_decode($response, true);
|
||||
if ($responseData && isset($responseData['exception_body'])) {
|
||||
$errorMsg = $responseData['exception_body']['message'] ?? $responseData['exception_body']['debug_message'] ?? 'API Error';
|
||||
} elseif ($responseData && isset($responseData['error'])) {
|
||||
$errorMsg = $responseData['error'];
|
||||
if ($curlError) {
|
||||
return [
|
||||
'success' => false,
|
||||
'filename' => $filename,
|
||||
'error' => 'CURL error: ' . $curlError,
|
||||
'http_code' => 0
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'success' => false,
|
||||
'filename' => $filename,
|
||||
'error' => $errorMsg,
|
||||
'http_code' => $httpCode,
|
||||
'response_body' => $response
|
||||
];
|
||||
if ($response === false) {
|
||||
return [
|
||||
'success' => false,
|
||||
'filename' => $filename,
|
||||
'error' => 'Upload request failed - no response received',
|
||||
'http_code' => 0
|
||||
];
|
||||
}
|
||||
|
||||
if ($httpCode == 201) {
|
||||
$responseData = @json_decode($response, true);
|
||||
|
||||
return [
|
||||
'success' => true,
|
||||
'asset_id' => $responseData['asset_resource_list']['asset_resource'][0]['asset']['asset_id'] ?? null,
|
||||
'filename' => $filename,
|
||||
'http_code' => $httpCode
|
||||
];
|
||||
}
|
||||
|
||||
// Extract detailed error message from API response
|
||||
$errorMsg = 'Upload failed';
|
||||
if (!empty($response)) {
|
||||
// Limit response size to prevent crashes
|
||||
$limitedResponse = substr($response, 0, 5000);
|
||||
$responseData = @json_decode($limitedResponse, true);
|
||||
if ($responseData && isset($responseData['exception_body'])) {
|
||||
$errorMsg = $responseData['exception_body']['message'] ?? $responseData['exception_body']['debug_message'] ?? 'API Error';
|
||||
} elseif ($responseData && isset($responseData['error'])) {
|
||||
$errorMsg = $responseData['error'];
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'success' => false,
|
||||
'filename' => $filename,
|
||||
'error' => $errorMsg,
|
||||
'http_code' => $httpCode,
|
||||
'response_body' => substr($response ?? '', 0, 1000) // Limit to 1KB
|
||||
];
|
||||
} catch (Exception $e) {
|
||||
return [
|
||||
'success' => false,
|
||||
'filename' => $filename,
|
||||
'error' => 'PHP Exception during upload: ' . $e->getMessage(),
|
||||
'http_code' => 0
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue