From 2833ab64f070cd48c74b11f3e275c461cae3c838 Mon Sep 17 00:00:00 2001 From: Colin Viebrock Date: Fri, 6 Nov 2015 20:33:52 -0600 Subject: [PATCH 1/3] Ability to add media from URLs --- src/HasMedia/HasMediaTrait.php | 17 +++++++++++++++++ tests/FileAdder/IntegrationTest.php | 17 +++++++++++++++++ tests/TestCase.php | 5 +++++ 3 files changed, 39 insertions(+) diff --git a/src/HasMedia/HasMediaTrait.php b/src/HasMedia/HasMediaTrait.php index c3f2d2193..f5d57c798 100644 --- a/src/HasMedia/HasMediaTrait.php +++ b/src/HasMedia/HasMediaTrait.php @@ -5,6 +5,7 @@ use Spatie\MediaLibrary\Conversion\Conversion; use Spatie\MediaLibrary\Exceptions\MediaDoesNotBelongToModel; use Spatie\MediaLibrary\Exceptions\MediaIsNotPartOfCollection; +use Spatie\MediaLibrary\Exceptions\UrlCouldNotBeOpened; use Spatie\MediaLibrary\FileAdder\FileAdderFactory; use Spatie\MediaLibrary\Filesystem; use Spatie\MediaLibrary\Media; @@ -40,6 +41,22 @@ public function addMedia($file) return app(FileAdderFactory::class)->create($this, $file); } + public function addMediaFromUrl($url) + { + if ($stream = @fopen($url, 'r')) { + + $tmpFile = tempnam(sys_get_temp_dir(), 'media-library'); + echo "--- $tmpFile ---"; + file_put_contents($tmpFile, $stream); + + return app(FileAdderFactory::class)->create($this, $tmpFile); + + } + + throw new UrlCouldNotBeOpened; + + } + /** * Copy a file to the medialibrary. * diff --git a/tests/FileAdder/IntegrationTest.php b/tests/FileAdder/IntegrationTest.php index a6e977436..1ef0de27b 100644 --- a/tests/FileAdder/IntegrationTest.php +++ b/tests/FileAdder/IntegrationTest.php @@ -132,6 +132,23 @@ public function it_can_add_an_upload_to_the_medialibrary() $this->assertFileExists($this->getMediaDirectory($media->id.'/'.$media->file_name)); } + /** + * @test + */ + public function it_can_add_a_remote_file_to_the_medialibrary() + { + $url = $this->getTestUrl(); + $filename = basename(parse_url($url, PHP_URL_PATH)); + + $media = $this->testModel->addMediaFromUrl($url) + ->usingName('test') + ->usingFileName($filename) + ->toMediaLibrary(); + + $this->assertEquals('test', $media->name); + $this->assertFileExists($this->getMediaDirectory($media->id.'/'.$filename)); + } + /** * @test */ diff --git a/tests/TestCase.php b/tests/TestCase.php index 5d664d85e..7caede05b 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -131,4 +131,9 @@ public function getTestJpg() { return $this->getTestFilesDirectory('test.jpg'); } + + public function getTestUrl() + { + return 'http://medialibrary.spatie.be/assets/images/mountain.jpg'; + } } From ddb71691f4636bad45eeff16a7abb33fb6f0a93e Mon Sep 17 00:00:00 2001 From: Colin Viebrock Date: Fri, 6 Nov 2015 20:35:38 -0600 Subject: [PATCH 2/3] cleanup and code-style --- src/HasMedia/HasMediaTrait.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/HasMedia/HasMediaTrait.php b/src/HasMedia/HasMediaTrait.php index f5d57c798..306bcd51e 100644 --- a/src/HasMedia/HasMediaTrait.php +++ b/src/HasMedia/HasMediaTrait.php @@ -44,13 +44,10 @@ public function addMedia($file) public function addMediaFromUrl($url) { if ($stream = @fopen($url, 'r')) { - $tmpFile = tempnam(sys_get_temp_dir(), 'media-library'); - echo "--- $tmpFile ---"; file_put_contents($tmpFile, $stream); return app(FileAdderFactory::class)->create($this, $tmpFile); - } throw new UrlCouldNotBeOpened; From 72b4d0b6329edb3d0987732c765c9114ad1e5ac1 Mon Sep 17 00:00:00 2001 From: Colin Viebrock Date: Fri, 6 Nov 2015 21:09:08 -0600 Subject: [PATCH 3/3] add Exception file --- src/Exceptions/UrlCouldNotBeOpened.php | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/Exceptions/UrlCouldNotBeOpened.php diff --git a/src/Exceptions/UrlCouldNotBeOpened.php b/src/Exceptions/UrlCouldNotBeOpened.php new file mode 100644 index 000000000..e04bcea64 --- /dev/null +++ b/src/Exceptions/UrlCouldNotBeOpened.php @@ -0,0 +1,9 @@ +