telechargement ping pong
This commit is contained in:
		| @@ -3,6 +3,6 @@ return [ | |||||||
|   'routes' => [ |   'routes' => [ | ||||||
|     ['name' => 'page#main', 'url' => '/', 'verb' => 'GET'], |     ['name' => 'page#main', 'url' => '/', 'verb' => 'GET'], | ||||||
|     ['name' => 'page#zipDrop', 'url' => '/zipDrop', 'verb' => 'GET'], |     ['name' => 'page#zipDrop', 'url' => '/zipDrop', 'verb' => 'GET'], | ||||||
|     ['name' => 'page#getZipFile', 'url' => '/getZipFile', 'verb' => 'POST'] |     ['name' => 'page#getZipFile', 'url' => '/getZipFile', 'verb' => 'GET'] | ||||||
|   ] |   ] | ||||||
| ]; | ]; | ||||||
|   | |||||||
| @@ -34,72 +34,96 @@ class PageController extends Controller { | |||||||
| 	#[NoCSRFRequired] | 	#[NoCSRFRequired] | ||||||
| 	#[NoAdminRequired] | 	#[NoAdminRequired] | ||||||
| 	#[OpenAPI(OpenAPI::SCOPE_IGNORE)] | 	#[OpenAPI(OpenAPI::SCOPE_IGNORE)] | ||||||
| 	#[FrontpageRoute(verb: 'POST', url: '/zipDrop')] | 	#[FrontpageRoute(verb: 'GET', url: '/zipDrop')] | ||||||
| 	public function zipDrop() { | 	public function zipDrop() { | ||||||
|  | 		// Récupérer le paramètre subUrl (compatible GET et POST) | ||||||
| 		$subUrl = $this->request->getParam('subUrl'); | 		$subUrl = $this->request->getParam('subUrl'); | ||||||
|  |  | ||||||
| 		if (!$subUrl) { | 		if (!$subUrl) { | ||||||
| 			return new JSONResponse(['error' => 'subUrl is required'], 400); // Retourner une réponse d'erreur 400 si le paramètre est manquant | 			return new \OCP\AppFramework\Http\DataResponse([ | ||||||
|  | 				'error' => 'Le paramètre subUrl est manquant' | ||||||
|  | 			], 400); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// Optionnel : Validation de l'URL | ||||||
|  | 		if (filter_var($subUrl, FILTER_VALIDATE_URL) === false) { | ||||||
|  | 			return new \OCP\AppFramework\Http\DataResponse([ | ||||||
|  | 				'error' => 'subUrl n\'est pas une URL valide' | ||||||
|  | 			], 400); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		$parameters = array('archiveUrl' => $subUrl); | 		$parameters = array('archiveUrl' => $subUrl); | ||||||
|  |  | ||||||
| 		// Créer une réponse basée sur un template | 		// Réponse de succès | ||||||
| 		$response = new TemplateResponse( | 		return new TemplateResponse( | ||||||
| 			Application::APP_ID, | 			Application::APP_ID, | ||||||
| 			'index', | 			'index', | ||||||
| 			$parameters | 			$parameters | ||||||
| 		); | 		); | ||||||
|  |  | ||||||
| 		return $response; |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	#[NoCSRFRequired] | 	#[NoCSRFRequired] | ||||||
| 	#[NoAdminRequired] | 	#[NoAdminRequired] | ||||||
| 	#[OpenAPI(OpenAPI::SCOPE_IGNORE)] | 	#[OpenAPI(OpenAPI::SCOPE_IGNORE)] | ||||||
| 	#[FrontpageRoute(verb: 'POST', url: '/getZipFile')] | 	#[FrontpageRoute(verb: 'GET', url: '/getZipFile')] | ||||||
| 	public function getZipFile() { | 	public function getZipFile() { | ||||||
| 		// Récupérer les données envoyées dans la requête POST | 		// Récupérer les données envoyées dans la requête | ||||||
| 		$requestData = $this->request->getParams(); // Accéder aux paramètres envoyés | 		$zipUrl = $this->request->getParam('subUrl'); | ||||||
| 		$zipUrl = $requestData['subUrl'] ?? null; // Récupérer 'subUrl' ou null si absent |  | ||||||
|  | 		// Initialiser les paramètres de réponse | ||||||
|  | 		$parameters = [ | ||||||
|  | 			'status' => 'error', // Par défaut, la réponse indique une erreur | ||||||
|  | 			'message' => '', | ||||||
|  | 			'data' => null | ||||||
|  | 		]; | ||||||
|  |  | ||||||
| 		// Valider l'URL | 		// Valider l'URL | ||||||
| 		if (!$zipUrl || filter_var($zipUrl, FILTER_VALIDATE_URL) === false) { | 		if (!$zipUrl || filter_var($zipUrl, FILTER_VALIDATE_URL) === false) { | ||||||
| 			return new \OCP\AppFramework\Http\DataResponse(['error' => 'Invalid URL'], 400); | 			$parameters['message'] = 'Invalid URL'; | ||||||
|  | 			return new JsonResponse($parameters, 400); // 400 Bad Request | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		// Utiliser cURL pour récupérer le fichier ZIP à l'URL fournie |  | ||||||
| 		/*$ch = curl_init($zipUrl); |  | ||||||
| 		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); |  | ||||||
| 		$fileContent = curl_exec($ch); |  | ||||||
| 		$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // Récupérer le code HTTP |  | ||||||
| 		curl_close($ch);*/ |  | ||||||
|  |  | ||||||
| 		// Vérifier si le fichier est récupéré avec succès |  | ||||||
| 		/*if ($fileContent !== false && $httpCode === 200) { |  | ||||||
| 			$response = new \OCP\AppFramework\Http\DownloadResponse($fileContent); |  | ||||||
| 			$response->setContentDisposition('attachment', 'yourfile.zip'); |  | ||||||
| 			return $response; |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		// Gérer les erreurs si le fichier ne peut pas être récupéré |  | ||||||
| 		return new \OCP\AppFramework\Http\DataResponse(['error' => 'File not found'], 404); |  | ||||||
|  |  | ||||||
| 		new JSONResponse(['error' => 'subUrl is required'], 400); |  | ||||||
| 		*/ |  | ||||||
| 		try { | 		try { | ||||||
|  | 			// Initialiser cURL | ||||||
| 			$ch = curl_init(); | 			$ch = curl_init(); | ||||||
| 			curl_setopt($ch, CURLOPT_URL, $zipUrl); | 			curl_setopt($ch, CURLOPT_URL, $zipUrl); | ||||||
| 			curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | 			curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | ||||||
|  | 			curl_setopt($ch, CURLOPT_TIMEOUT, 10); // Timeout de 10 secondes | ||||||
|  | 			curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Suivre les redirections | ||||||
|  |  | ||||||
|  | 			// Récupérer le contenu | ||||||
| 			$response = curl_exec($ch); | 			$response = curl_exec($ch); | ||||||
|  |  | ||||||
|  | 			// Gérer les erreurs cURL | ||||||
| 			if (curl_errno($ch)) { | 			if (curl_errno($ch)) { | ||||||
| 				return new JSONResponse(['feur' => curl_error($ch)], 200); | 				$parameters['message'] = 'cURL error: ' . curl_error($ch); | ||||||
|  | 				curl_close($ch); | ||||||
|  | 				return new JsonResponse(['parameters' => $parameters, 'status' => 500]); // 500 Internal Server Error | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			return new JSONResponse(['feur' => $response], 200); | 			// Vérifier le code HTTP | ||||||
| 		} catch (Exception $e) { | 			$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); | ||||||
| 			return new JSONResponse(['feur' => $e->getMessage()], 500); | 			curl_close($ch); | ||||||
|  |  | ||||||
|  | 			if ($httpCode !== 200) { | ||||||
|  | 				$parameters['message'] = "HTTP error: $httpCode"; | ||||||
|  | 				return new JsonResponse(['parameters' => $parameters, 'status' => $httpCode]); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// Encodage explicite en UTF-8 si nécessaire | ||||||
|  | 			if (!mb_detect_encoding($response, 'UTF-8', true)) { | ||||||
|  | 				$response = utf8_encode($response); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// Si tout est OK, construire la réponse | ||||||
|  | 			$parameters['status'] = 'success'; | ||||||
|  | 			$parameters['message'] = 'File retrieved successfully'; | ||||||
|  | 			$parameters['data'] = $response; // Encodage Base64 pour éviter les problèmes d'encodage JSON | ||||||
|  |  | ||||||
|  | 			return new JsonResponse(['parameters' => $parameters, 'status' => 200]); // 200 OK | ||||||
|  | 		} catch (\Exception $e) { | ||||||
|  | 			$parameters['message'] = 'Exception: ' . $e->getMessage(); | ||||||
|  | 			return new JsonResponse(['parameters' => $parameters, 'status' => 500]); // 500 Internal Server Error | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -40,7 +40,7 @@ export default { | |||||||
| 	data() { | 	data() { | ||||||
| 		console.log('feur') | 		console.log('feur') | ||||||
| 		let zipUrl = document.getElementById('archiveInfos').getAttribute('dataarchiveurl'); | 		let zipUrl = document.getElementById('archiveInfos').getAttribute('dataarchiveurl'); | ||||||
| 		console.log(zipUrl) | 		console.log(zipUrl); | ||||||
| 		return { | 		return { | ||||||
| 			zipUrl, | 			zipUrl, | ||||||
| 			sharedFile: null, | 			sharedFile: null, | ||||||
|   | |||||||
| @@ -167,20 +167,11 @@ export default { | |||||||
|         async loadZipContent() { |         async loadZipContent() { | ||||||
|             try { |             try { | ||||||
|                 var baseUrl = OC.generateUrl('/apps/webtransfer/getZipFile'); |                 var baseUrl = OC.generateUrl('/apps/webtransfer/getZipFile'); | ||||||
|                 var postData = { |                 let fullUrl = baseUrl + '?subUrl=' + this.zipUrl; | ||||||
|                     subUrl: this.zipUrl |  | ||||||
|                 }; |  | ||||||
|  |  | ||||||
|                 let response = await fetch(baseUrl, { |                 let response = await fetch(fullUrl); | ||||||
|                                                         method: 'POST', |                 let responseJson = await response.json(); | ||||||
|                                                         headers: { |                 const zipData = responseJson.parameters.data; | ||||||
|                                                             'Content-Type': 'application/json' // Type de contenu JSON |  | ||||||
|                                                         }, |  | ||||||
|                                                         body: JSON.stringify(postData) // Convertir les données en JSON |  | ||||||
|                                                     }) |  | ||||||
|  |  | ||||||
|                 console.log('response: ', await response.json()) |  | ||||||
|                 const zipData = await response.blob(); |  | ||||||
|                 this.zipName = this.zipUrl.split('/').pop(); |                 this.zipName = this.zipUrl.split('/').pop(); | ||||||
|                 const zip = await JSZip.loadAsync(zipData); |                 const zip = await JSZip.loadAsync(zipData); | ||||||
|                 this.zipSize = zipData.size; |                 this.zipSize = zipData.size; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user