Repo for the search and displace core module including the interface to select files and search and displace operations to run on them.
https://searchanddisplace.com
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
2.9 KiB
106 lines
2.9 KiB
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Contracts\Container\BindingResolutionException;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Http\UploadedFile;
|
|
use GuzzleHttp\Client;
|
|
use GuzzleHttp\Exception\BadResponseException;
|
|
use Illuminate\Support\Str;
|
|
use Symfony\Component\Process\Process;
|
|
|
|
class FileController extends Controller
|
|
{
|
|
|
|
/**
|
|
*
|
|
* @return JsonResponse
|
|
*
|
|
* @throws BindingResolutionException
|
|
*/
|
|
public function create(): JsonResponse
|
|
{
|
|
try {
|
|
/** @var UploadedFile $file */
|
|
$file = request()->file('file');
|
|
$time = time();
|
|
$fileName = $time . '-' . $file->getClientOriginalName();
|
|
$fileId = $time . pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
|
|
|
|
$path = Storage::putFileAs('files/', $file, $fileName);
|
|
|
|
$guzzle = new Client();
|
|
/** @var \Psr\Http\Message\ResponseInterface $response */
|
|
$response = $guzzle->request('POST', 'http://ingest.sandd/ingest', [
|
|
'multipart' => [
|
|
[
|
|
'name' => 'id',
|
|
'contents' => $fileId,
|
|
'headers' => [ 'Content-Type' => 'application/json' ]
|
|
],
|
|
[
|
|
'name' => 'document',
|
|
'contents' => fopen($file->getPathname(), 'r')
|
|
]
|
|
]
|
|
]);
|
|
|
|
return response()->json([
|
|
'file' => $file->getClientOriginalName(),
|
|
'id' => $fileId,
|
|
'path' => $path,
|
|
]);
|
|
} catch (BadResponseException $e) {
|
|
return response()->json([
|
|
'message' => $e->getMessage(),
|
|
'response' => $e->getResponse()
|
|
], 400);
|
|
}
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public function convert(): JsonResponse
|
|
{
|
|
$mdFileContent = request()->input('content');
|
|
$tmpFileId = (string) Str::uuid();
|
|
|
|
Storage::disk('local')->put('tmp/' . $tmpFileId . '.md', $mdFileContent);
|
|
$tmpMdFilePath = Storage::path('tmp/' . $tmpFileId . '.md');
|
|
|
|
$pandoc = new Process([
|
|
'pandoc',
|
|
'-f',
|
|
'markdown',
|
|
'-t',
|
|
'odt',
|
|
$tmpMdFilePath
|
|
]);
|
|
|
|
$pandoc->start();
|
|
|
|
while ($pandoc->isRunning()) {
|
|
//
|
|
}
|
|
|
|
$odtFileContent = $pandoc->getOutput();
|
|
Storage::disk('local')->put('tmp/' . $tmpFileId . '.odt', $odtFileContent);
|
|
|
|
return response()->json([
|
|
'path' => 'tmp/' . $tmpFileId . '.odt'
|
|
]);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param string $path
|
|
* @return mixed
|
|
*/
|
|
public function download(string $path)
|
|
{
|
|
return Storage::download($path);
|
|
}
|
|
}
|