53
common/Files/Response/RemoteFileResponse.php
Executable file
53
common/Files/Response/RemoteFileResponse.php
Executable file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace Common\Files\Response;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Common\Files\FileEntry;
|
||||
|
||||
class RemoteFileResponse implements FileResponse
|
||||
{
|
||||
/**
|
||||
* @param FileEntry $entry
|
||||
* @param array $options
|
||||
* @return mixed
|
||||
*/
|
||||
public function make(FileEntry $entry, $options): mixed
|
||||
{
|
||||
if ($options['disposition'] === 'attachment') {
|
||||
$fileName = rawurlencode($entry->name);
|
||||
return $this->getTemporaryUrl($entry, $options, [
|
||||
'ResponseContentType' => 'application/octet-stream',
|
||||
'ResponseContentDisposition' => "attachment;filename={$fileName}",
|
||||
]);
|
||||
} else {
|
||||
if (config('common.site.use_presigned_s3_urls')) {
|
||||
return $this->getTemporaryUrl($entry, $options, [
|
||||
'ResponseContentType' => $entry->mime,
|
||||
]);
|
||||
} else {
|
||||
return redirect(
|
||||
$entry
|
||||
->getDisk()
|
||||
->url($entry->getStoragePath($options['useThumbnail'])),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function getTemporaryUrl(
|
||||
FileEntry $entry,
|
||||
array $entryOptions,
|
||||
array $urlOptions,
|
||||
) {
|
||||
return redirect(
|
||||
$entry
|
||||
->getDisk()
|
||||
->temporaryUrl(
|
||||
$entry->getStoragePath($entryOptions['useThumbnail']),
|
||||
Carbon::now()->addMinutes(30),
|
||||
$urlOptions,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user