|
|
<?php
namespace App\Http\Controllers;
use App\SearchDisplace\Ingest\SendDocument; use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Storage; use Illuminate\Http\UploadedFile; use GuzzleHttp\Exception\BadResponseException; use App\SearchDisplace\Convertor\Convertor; use App\SearchDisplace\SearchAndDisplaceXML;
class FileController extends Controller { public function __construct() { $this->storage = Storage::disk('local'); }
/** * * @return JsonResponse */ public function create(): JsonResponse { request()->validate([ 'file' => [ 'required', 'file', 'max:10000', 'mimes:doc,dot,docx,dotx,docm,dotm,odt,rtf,pdf,txt', ], ]);
try { /** @var UploadedFile $file */ $file = request()->file('file'); $time = time(); $fileId = $time . '_' . pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
$sendDocument = new SendDocument();
$sendDocument->execute($fileId, [ 'path' => $file->getRealPath(), 'type' => $file->getMimeType(), 'name' => $file->getClientOriginalName() ]);
$originalFile = $fileId . "/document." . $file->extension();
$this->storage->put("contracts/{$originalFile}", file_get_contents($file)); // keep the original file
$xml = Convertor::convert('xml', $this->storage->path("contracts/" . $originalFile));
$this->storage->delete("contracts/{$originalFile}");
return response()->json([ 'id' => $fileId, 'file_name' => $file->getClientOriginalName(), ]); } catch (BadResponseException $e) { return response()->json([ 'message' => $e->getMessage(), 'response' => $e->getResponse() ], 400); } catch (\Exception $e) { return response()->json([ 'message' => $e->getMessage(), ], 400); } }
/** * */ public function convert(): JsonResponse { $file = (object) request()->input('file'); $xml = $this->storage->path("contracts/{$file->id}/document_sdapplied.xml");
$original = SearchAndDisplaceXML::prepareForDownload($file->type, $xml);
return response()->json([ 'path' => "tmp/$original" ]); }
/** * * @param string $path * @return mixed */ public function download(string $path) { return $this->storage->download($path); }
/** * Clear contracts and tmp directory * * @param string $id * @return JsonResponse */ public function delete(string $id): JsonResponse { $this->storage->deleteDirectory("contracts/${id}"); $tmpFiles = $this->storage->allFiles("tmp"); $success = $this->storage->delete($tmpFiles);
return response()->json(['success' => $success]); } }
|