Use checksums provided by attachments themselves
This commit is contained in:
parent
51ae375ada
commit
81398f65a7
|
@ -5,6 +5,7 @@
|
||||||
use App\Classes\AttachmentsManager;
|
use App\Classes\AttachmentsManager;
|
||||||
use App\Exceptions\AttachmentNotFound;
|
use App\Exceptions\AttachmentNotFound;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Intervention\Image\Exceptions\DecoderException;
|
use Intervention\Image\Exceptions\DecoderException;
|
||||||
use Intervention\Image\Laravel\Facades\Image;
|
use Intervention\Image\Laravel\Facades\Image;
|
||||||
|
@ -115,6 +116,18 @@ private function repairKnownImage(string $ref, array $data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$checksum = $this->disk->checksum($expectedFullPath);
|
||||||
|
|
||||||
|
if (!empty($data['checksum']) && $data['checksum'] !== $checksum) {
|
||||||
|
Log::warning('File checksum has changed', [
|
||||||
|
'file' => $expectedFullPath,
|
||||||
|
'oldChecsum' => $data['checksum'],
|
||||||
|
'newChecksum' => $checksum,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data['checksum'] = $checksum;
|
||||||
|
|
||||||
$this->manager->set(sprintf('files.%s', $ref), $data);
|
$this->manager->set(sprintf('files.%s', $ref), $data);
|
||||||
|
|
||||||
$this->syncImageVariants($ref);
|
$this->syncImageVariants($ref);
|
||||||
|
@ -159,9 +172,14 @@ private function syncImageVariant(string $ref, string $filter)
|
||||||
}
|
}
|
||||||
|
|
||||||
$variantData = $this->getVariantData($ref, $filter);
|
$variantData = $this->getVariantData($ref, $filter);
|
||||||
|
|
||||||
$variantFilepath = $this->getVariantFullPath($ref, $filter);
|
$variantFilepath = $this->getVariantFullPath($ref, $filter);
|
||||||
|
|
||||||
|
if (empty($variantData['checksum'])) {
|
||||||
|
$variantData['checksum'] = $this->disk->checksum($variantFilepath);
|
||||||
|
|
||||||
|
$this->manager->set(sprintf('variants.%s.%s', $ref, $filter), $variantData);
|
||||||
|
}
|
||||||
|
|
||||||
if (!$this->disk->exists($variantFilepath)) {
|
if (!$this->disk->exists($variantFilepath)) {
|
||||||
$this->createImageVariant($ref, $filter);
|
$this->createImageVariant($ref, $filter);
|
||||||
} else {
|
} else {
|
||||||
|
@ -214,6 +232,7 @@ private function createImageVariant(string $ref, string $filter)
|
||||||
|
|
||||||
$variantData['filename'] = $this->getVariantRelativePath($ref, $filter);
|
$variantData['filename'] = $this->getVariantRelativePath($ref, $filter);
|
||||||
$variantData['last_modified'] = now();
|
$variantData['last_modified'] = now();
|
||||||
|
$variantData['checksum'] = $this->disk->checksum($target);
|
||||||
|
|
||||||
$this->manager->set(sprintf('variants.%s.%s', $ref, $filter), $variantData);
|
$this->manager->set(sprintf('variants.%s.%s', $ref, $filter), $variantData);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
namespace App\Classes\Traits\Repairs;
|
namespace App\Classes\Traits\Repairs;
|
||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trait for AttachmentsManager
|
* Trait for AttachmentsManager
|
||||||
|
@ -76,6 +77,18 @@ private function repairKnownSound(string $ref, array $data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$checksum = $this->disk->checksum($expectedFullPath);
|
||||||
|
|
||||||
|
if (!empty($data['checksum']) && $data['checksum'] !== $checksum) {
|
||||||
|
Log::warning('File checksum has changed', [
|
||||||
|
'file' => $expectedFullPath,
|
||||||
|
'oldChecsum' => $data['checksum'],
|
||||||
|
'newChecksum' => $checksum,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data['checksum'] = $checksum;
|
||||||
|
|
||||||
$this->manager->set(sprintf('files.%s', $ref), $data);
|
$this->manager->set(sprintf('files.%s', $ref), $data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
namespace App\Classes\Traits\Repairs;
|
namespace App\Classes\Traits\Repairs;
|
||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trait for AttachmentsManager
|
* Trait for AttachmentsManager
|
||||||
|
@ -76,6 +77,18 @@ private function repairKnownVideo(string $ref, array $data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$checksum = $this->disk->checksum($expectedFullPath);
|
||||||
|
|
||||||
|
if (!empty($data['checksum']) && $data['checksum'] !== $checksum) {
|
||||||
|
Log::warning('File checksum has changed', [
|
||||||
|
'file' => $expectedFullPath,
|
||||||
|
'oldChecsum' => $data['checksum'],
|
||||||
|
'newChecksum' => $checksum,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data['checksum'] = $checksum;
|
||||||
|
|
||||||
$this->manager->set(sprintf('files.%s', $ref), $data);
|
$this->manager->set(sprintf('files.%s', $ref), $data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,8 +24,8 @@ public function __construct(protected array $data, protected ?array $variant = [
|
||||||
*/
|
*/
|
||||||
public function render(): View|Closure|string
|
public function render(): View|Closure|string
|
||||||
{
|
{
|
||||||
$originalUrl = $this->copyFile($this->data['filename']);
|
$originalUrl = $this->copyFile($this->data);
|
||||||
$variantUrl = $this->variant ? $this->copyFile($this->variant['filename']) : null;
|
$variantUrl = $this->variant ? $this->copyFile($this->variant) : null;
|
||||||
|
|
||||||
return view($this->view, [
|
return view($this->view, [
|
||||||
'originalUrl' => $originalUrl,
|
'originalUrl' => $originalUrl,
|
||||||
|
@ -39,13 +39,15 @@ public function render(): View|Closure|string
|
||||||
/**
|
/**
|
||||||
* Copy a file to public disk and return relative url to use
|
* Copy a file to public disk and return relative url to use
|
||||||
*/
|
*/
|
||||||
protected function copyFile(string $path)
|
protected function copyFile(array $data)
|
||||||
{
|
{
|
||||||
$content = Storage::disk(env('CONTENT_DISK'))->get($path);
|
$path = $data['filename'];
|
||||||
$md5 = md5($content);
|
$checksum = $data['checksum'];
|
||||||
$targetPath = $this->buildTargetFilePath($path, $md5);
|
$targetPath = $this->buildTargetFilePath($path, $checksum);
|
||||||
|
|
||||||
if (!Storage::disk('public')->exists($targetPath)) {
|
if (!Storage::disk('public')->exists($targetPath)) {
|
||||||
|
$content = Storage::disk(env('CONTENT_DISK'))->get($path);
|
||||||
|
|
||||||
Storage::disk('public')->put($targetPath, $content);
|
Storage::disk('public')->put($targetPath, $content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,11 +57,11 @@ protected function copyFile(string $path)
|
||||||
/**
|
/**
|
||||||
* Return a path for the target file
|
* Return a path for the target file
|
||||||
*/
|
*/
|
||||||
protected function buildTargetFilePath(string $originalPath, string $md5)
|
protected function buildTargetFilePath(string $originalPath, string $checksum)
|
||||||
{
|
{
|
||||||
$extension = pathinfo($originalPath, PATHINFO_EXTENSION);
|
$extension = pathinfo($originalPath, PATHINFO_EXTENSION);
|
||||||
$pathParts = str_split($md5, 4);
|
$pathParts = str_split($checksum, 4);
|
||||||
$pathParts[] = sprintf('%s.%s', $md5, $extension);
|
$pathParts[] = sprintf('%s.%s', $checksum, $extension);
|
||||||
$targetPath = implode('/', $pathParts);
|
$targetPath = implode('/', $pathParts);
|
||||||
|
|
||||||
return $targetPath;
|
return $targetPath;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user