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\Exceptions\AttachmentNotFound;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Str;
|
||||
use Intervention\Image\Exceptions\DecoderException;
|
||||
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->syncImageVariants($ref);
|
||||
|
@ -159,9 +172,14 @@ private function syncImageVariant(string $ref, string $filter)
|
|||
}
|
||||
|
||||
$variantData = $this->getVariantData($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)) {
|
||||
$this->createImageVariant($ref, $filter);
|
||||
} else {
|
||||
|
@ -214,6 +232,7 @@ private function createImageVariant(string $ref, string $filter)
|
|||
|
||||
$variantData['filename'] = $this->getVariantRelativePath($ref, $filter);
|
||||
$variantData['last_modified'] = now();
|
||||
$variantData['checksum'] = $this->disk->checksum($target);
|
||||
|
||||
$this->manager->set(sprintf('variants.%s.%s', $ref, $filter), $variantData);
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
namespace App\Classes\Traits\Repairs;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
namespace App\Classes\Traits\Repairs;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,8 +24,8 @@ public function __construct(protected array $data, protected ?array $variant = [
|
|||
*/
|
||||
public function render(): View|Closure|string
|
||||
{
|
||||
$originalUrl = $this->copyFile($this->data['filename']);
|
||||
$variantUrl = $this->variant ? $this->copyFile($this->variant['filename']) : null;
|
||||
$originalUrl = $this->copyFile($this->data);
|
||||
$variantUrl = $this->variant ? $this->copyFile($this->variant) : null;
|
||||
|
||||
return view($this->view, [
|
||||
'originalUrl' => $originalUrl,
|
||||
|
@ -39,13 +39,15 @@ public function render(): View|Closure|string
|
|||
/**
|
||||
* 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);
|
||||
$md5 = md5($content);
|
||||
$targetPath = $this->buildTargetFilePath($path, $md5);
|
||||
$path = $data['filename'];
|
||||
$checksum = $data['checksum'];
|
||||
$targetPath = $this->buildTargetFilePath($path, $checksum);
|
||||
|
||||
if (!Storage::disk('public')->exists($targetPath)) {
|
||||
$content = Storage::disk(env('CONTENT_DISK'))->get($path);
|
||||
|
||||
Storage::disk('public')->put($targetPath, $content);
|
||||
}
|
||||
|
||||
|
@ -55,11 +57,11 @@ protected function copyFile(string $path)
|
|||
/**
|
||||
* 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);
|
||||
$pathParts = str_split($md5, 4);
|
||||
$pathParts[] = sprintf('%s.%s', $md5, $extension);
|
||||
$pathParts = str_split($checksum, 4);
|
||||
$pathParts[] = sprintf('%s.%s', $checksum, $extension);
|
||||
$targetPath = implode('/', $pathParts);
|
||||
|
||||
return $targetPath;
|
||||
|
|
Loading…
Reference in New Issue
Block a user