Fix upload crash - remove undefined tryPostmanUpload method call

This commit is contained in:
DJP 2025-10-24 11:47:40 -04:00
parent 289d34bf2b
commit 079ae37ea5

View file

@ -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
];
}
}
/**