fixed remote media streaming
This commit is contained in:
parent
d46bff3c2d
commit
bd39c2b9a2
@ -5,8 +5,8 @@ namespace App\Http\Controllers\Common;
|
|||||||
use App\Abstracts\Http\Controller;
|
use App\Abstracts\Http\Controller;
|
||||||
use App\Models\Common\Media;
|
use App\Models\Common\Media;
|
||||||
use App\Traits\Uploads as Helper;
|
use App\Traits\Uploads as Helper;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use File;
|
|
||||||
|
|
||||||
class Uploads extends Controller
|
class Uploads extends Controller
|
||||||
{
|
{
|
||||||
@ -31,7 +31,7 @@ class Uploads extends Controller
|
|||||||
return response(null, 204);
|
return response(null, 204);
|
||||||
}
|
}
|
||||||
|
|
||||||
return response()->file($path);
|
return $this->streamMedia($media, $path);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -112,7 +112,7 @@ class Uploads extends Controller
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return response()->download($path);
|
return $this->streamMedia($media, $path);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -151,7 +151,7 @@ class Uploads extends Controller
|
|||||||
|
|
||||||
$media->delete(); //will not delete files
|
$media->delete(); //will not delete files
|
||||||
|
|
||||||
File::delete($path);
|
Storage::delete($path);
|
||||||
|
|
||||||
if (!empty($request->input('page'))) {
|
if (!empty($request->input('page'))) {
|
||||||
switch ($request->input('page')) {
|
switch ($request->input('page')) {
|
||||||
|
@ -111,4 +111,51 @@ trait Uploads
|
|||||||
|
|
||||||
return Storage::path($path);
|
return Storage::path($path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function streamMedia($media, $path = '', $action = '')
|
||||||
|
{
|
||||||
|
if ($this->isLocalStorage()) {
|
||||||
|
if (empty($path)) {
|
||||||
|
$path = $this->getMediaPathOnStorage($media);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($action)) {
|
||||||
|
$action = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['function'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->streamLocalMedia($path, $action);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->streamRemoteMedia($media);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function streamLocalMedia($path, $action)
|
||||||
|
{
|
||||||
|
$function = ($action == 'get') ? 'file' : $action;
|
||||||
|
|
||||||
|
return response()->$function($path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function streamRemoteMedia($media)
|
||||||
|
{
|
||||||
|
return response()->streamDownload(
|
||||||
|
function() use ($media) {
|
||||||
|
$stream = $media->stream();
|
||||||
|
|
||||||
|
while($bytes = $stream->read(1024)) {
|
||||||
|
echo $bytes;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
$media->basename,
|
||||||
|
[
|
||||||
|
'Content-Type' => $media->mime_type,
|
||||||
|
'Content-Length' => $media->size,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isLocalStorage()
|
||||||
|
{
|
||||||
|
return config('filesystems.disks.' . config('filesystems.default') . '.driver') == 'local';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
"laravel/tinker": "^2.5",
|
"laravel/tinker": "^2.5",
|
||||||
"laravel/ui": "^3.0",
|
"laravel/ui": "^3.0",
|
||||||
"laravelcollective/html": "6.2.*",
|
"laravelcollective/html": "6.2.*",
|
||||||
|
"league/flysystem-aws-s3-v3": "1.0.*",
|
||||||
"league/oauth2-client": "2.6.*",
|
"league/oauth2-client": "2.6.*",
|
||||||
"league/omnipay": "3.1.*",
|
"league/omnipay": "3.1.*",
|
||||||
"livewire/livewire": "2.3.*",
|
"livewire/livewire": "2.3.*",
|
||||||
|
226
composer.lock
generated
226
composer.lock
generated
@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "0f9d8ca997b25292972d0b41575258a6",
|
"content-hash": "49b08641aed852dd08fe0e3da19ea37e",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "akaunting/laravel-firewall",
|
"name": "akaunting/laravel-firewall",
|
||||||
@ -627,6 +627,96 @@
|
|||||||
},
|
},
|
||||||
"time": "2021-03-11T06:42:03+00:00"
|
"time": "2021-03-11T06:42:03+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "aws/aws-sdk-php",
|
||||||
|
"version": "3.180.6",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/aws/aws-sdk-php.git",
|
||||||
|
"reference": "1a836be14ba664ea11eb965dec77715e9e607013"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/1a836be14ba664ea11eb965dec77715e9e607013",
|
||||||
|
"reference": "1a836be14ba664ea11eb965dec77715e9e607013",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-json": "*",
|
||||||
|
"ext-pcre": "*",
|
||||||
|
"ext-simplexml": "*",
|
||||||
|
"guzzlehttp/guzzle": "^5.3.3|^6.2.1|^7.0",
|
||||||
|
"guzzlehttp/promises": "^1.4.0",
|
||||||
|
"guzzlehttp/psr7": "^1.7.0",
|
||||||
|
"mtdowling/jmespath.php": "^2.6",
|
||||||
|
"php": ">=5.5"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"andrewsville/php-token-reflection": "^1.4",
|
||||||
|
"aws/aws-php-sns-message-validator": "~1.0",
|
||||||
|
"behat/behat": "~3.0",
|
||||||
|
"doctrine/cache": "~1.4",
|
||||||
|
"ext-dom": "*",
|
||||||
|
"ext-openssl": "*",
|
||||||
|
"ext-pcntl": "*",
|
||||||
|
"ext-sockets": "*",
|
||||||
|
"nette/neon": "^2.3",
|
||||||
|
"paragonie/random_compat": ">= 2",
|
||||||
|
"phpunit/phpunit": "^4.8.35|^5.4.3",
|
||||||
|
"psr/cache": "^1.0",
|
||||||
|
"psr/simple-cache": "^1.0",
|
||||||
|
"sebastian/comparator": "^1.2.3"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"aws/aws-php-sns-message-validator": "To validate incoming SNS notifications",
|
||||||
|
"doctrine/cache": "To use the DoctrineCacheAdapter",
|
||||||
|
"ext-curl": "To send requests using cURL",
|
||||||
|
"ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages",
|
||||||
|
"ext-sockets": "To use client-side monitoring"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "3.0-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Aws\\": "src/"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"src/functions.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"Apache-2.0"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Amazon Web Services",
|
||||||
|
"homepage": "http://aws.amazon.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project",
|
||||||
|
"homepage": "http://aws.amazon.com/sdkforphp",
|
||||||
|
"keywords": [
|
||||||
|
"amazon",
|
||||||
|
"aws",
|
||||||
|
"cloud",
|
||||||
|
"dynamodb",
|
||||||
|
"ec2",
|
||||||
|
"glacier",
|
||||||
|
"s3",
|
||||||
|
"sdk"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
|
||||||
|
"issues": "https://github.com/aws/aws-sdk-php/issues",
|
||||||
|
"source": "https://github.com/aws/aws-sdk-php/tree/3.180.6"
|
||||||
|
},
|
||||||
|
"time": "2021-05-10T18:17:07+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "balping/json-raw-encoder",
|
"name": "balping/json-raw-encoder",
|
||||||
"version": "v1.0.1",
|
"version": "v1.0.1",
|
||||||
@ -4979,16 +5069,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel/framework",
|
"name": "laravel/framework",
|
||||||
"version": "v8.40.0",
|
"version": "v8.41.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/laravel/framework.git",
|
"url": "https://github.com/laravel/framework.git",
|
||||||
"reference": "a654897ad7f97aea9d7ef292803939798c4a02a4"
|
"reference": "05417155d886df8710e55c84e12622b52d83c47c"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/laravel/framework/zipball/a654897ad7f97aea9d7ef292803939798c4a02a4",
|
"url": "https://api.github.com/repos/laravel/framework/zipball/05417155d886df8710e55c84e12622b52d83c47c",
|
||||||
"reference": "a654897ad7f97aea9d7ef292803939798c4a02a4",
|
"reference": "05417155d886df8710e55c84e12622b52d83c47c",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -5096,7 +5186,7 @@
|
|||||||
"phpunit/phpunit": "Required to use assertions and run tests (^8.5.8|^9.3.3).",
|
"phpunit/phpunit": "Required to use assertions and run tests (^8.5.8|^9.3.3).",
|
||||||
"predis/predis": "Required to use the predis connector (^1.1.2).",
|
"predis/predis": "Required to use the predis connector (^1.1.2).",
|
||||||
"psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
|
"psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
|
||||||
"pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0).",
|
"pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0).",
|
||||||
"symfony/cache": "Required to PSR-6 cache bridge (^5.1.4).",
|
"symfony/cache": "Required to PSR-6 cache bridge (^5.1.4).",
|
||||||
"symfony/filesystem": "Required to enable support for relative symbolic links (^5.1.4).",
|
"symfony/filesystem": "Required to enable support for relative symbolic links (^5.1.4).",
|
||||||
"symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).",
|
"symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).",
|
||||||
@ -5143,7 +5233,7 @@
|
|||||||
"issues": "https://github.com/laravel/framework/issues",
|
"issues": "https://github.com/laravel/framework/issues",
|
||||||
"source": "https://github.com/laravel/framework"
|
"source": "https://github.com/laravel/framework"
|
||||||
},
|
},
|
||||||
"time": "2021-04-28T14:38:56+00:00"
|
"time": "2021-05-11T14:00:02+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel/slack-notification-channel",
|
"name": "laravel/slack-notification-channel",
|
||||||
@ -5405,16 +5495,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "league/commonmark",
|
"name": "league/commonmark",
|
||||||
"version": "1.6.0",
|
"version": "1.6.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/thephpleague/commonmark.git",
|
"url": "https://github.com/thephpleague/commonmark.git",
|
||||||
"reference": "19a9673b833cc37770439097b381d86cd125bfe8"
|
"reference": "2651c497f005de305c7ba3f232cbd87b8c00ee8c"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/19a9673b833cc37770439097b381d86cd125bfe8",
|
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/2651c497f005de305c7ba3f232cbd87b8c00ee8c",
|
||||||
"reference": "19a9673b833cc37770439097b381d86cd125bfe8",
|
"reference": "2651c497f005de305c7ba3f232cbd87b8c00ee8c",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -5502,7 +5592,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-05-01T19:00:49+00:00"
|
"time": "2021-05-08T16:08:00+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "league/flysystem",
|
"name": "league/flysystem",
|
||||||
@ -5599,6 +5689,57 @@
|
|||||||
],
|
],
|
||||||
"time": "2020-08-23T07:39:11+00:00"
|
"time": "2020-08-23T07:39:11+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "league/flysystem-aws-s3-v3",
|
||||||
|
"version": "1.0.29",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
|
||||||
|
"reference": "4e25cc0582a36a786c31115e419c6e40498f6972"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/4e25cc0582a36a786c31115e419c6e40498f6972",
|
||||||
|
"reference": "4e25cc0582a36a786c31115e419c6e40498f6972",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"aws/aws-sdk-php": "^3.20.0",
|
||||||
|
"league/flysystem": "^1.0.40",
|
||||||
|
"php": ">=5.5.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"henrikbjorn/phpspec-code-coverage": "~1.0.1",
|
||||||
|
"phpspec/phpspec": "^2.0.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.0-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"League\\Flysystem\\AwsS3v3\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Frank de Jonge",
|
||||||
|
"email": "info@frenky.net"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Flysystem adapter for the AWS S3 SDK v3.x",
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/thephpleague/flysystem-aws-s3-v3/issues",
|
||||||
|
"source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/1.0.29"
|
||||||
|
},
|
||||||
|
"time": "2020-10-08T18:58:37+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "league/fractal",
|
"name": "league/fractal",
|
||||||
"version": "0.19.2",
|
"version": "0.19.2",
|
||||||
@ -6798,6 +6939,67 @@
|
|||||||
},
|
},
|
||||||
"time": "2020-10-10T14:11:58+00:00"
|
"time": "2020-10-10T14:11:58+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "mtdowling/jmespath.php",
|
||||||
|
"version": "2.6.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/jmespath/jmespath.php.git",
|
||||||
|
"reference": "42dae2cbd13154083ca6d70099692fef8ca84bfb"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/42dae2cbd13154083ca6d70099692fef8ca84bfb",
|
||||||
|
"reference": "42dae2cbd13154083ca6d70099692fef8ca84bfb",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^5.4 || ^7.0 || ^8.0",
|
||||||
|
"symfony/polyfill-mbstring": "^1.17"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"composer/xdebug-handler": "^1.4",
|
||||||
|
"phpunit/phpunit": "^4.8.36 || ^7.5.15"
|
||||||
|
},
|
||||||
|
"bin": [
|
||||||
|
"bin/jp.php"
|
||||||
|
],
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "2.6-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"JmesPath\\": "src/"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"src/JmesPath.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Michael Dowling",
|
||||||
|
"email": "mtdowling@gmail.com",
|
||||||
|
"homepage": "https://github.com/mtdowling"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Declaratively specify how to extract elements from a JSON document",
|
||||||
|
"keywords": [
|
||||||
|
"json",
|
||||||
|
"jsonpath"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/jmespath/jmespath.php/issues",
|
||||||
|
"source": "https://github.com/jmespath/jmespath.php/tree/2.6.0"
|
||||||
|
},
|
||||||
|
"time": "2020-07-31T21:01:56+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "myclabs/php-enum",
|
"name": "myclabs/php-enum",
|
||||||
"version": "1.8.0",
|
"version": "1.8.0",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user