Skip to content

Commit a32af84

Browse files
author
Recca Tsai
committed
decoupling
1 parent a83d8b3 commit a32af84

File tree

9 files changed

+175
-96
lines changed

9 files changed

+175
-96
lines changed

src/Contracts/Uploader.php

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,11 @@ interface Uploader
1212
/**
1313
* __construct.
1414
*
15+
* @param array $config
1516
* @param \Illuminate\Http\Request $request
1617
* @param \Recca0120\Upload\Filesystem $filesystem
17-
* @param string $path
1818
*/
19-
public function __construct(Request $request, Filesystem $filesystem, $path = null);
20-
21-
/**
22-
* setPath.
23-
*
24-
* @param string $path
25-
*
26-
* @return static
27-
*/
28-
public function setPath($path = null);
19+
public function __construct($config = [], Request $request = null, Filesystem $filesystem = null);
2920

3021
/**
3122
* receive.

src/Receiver.php

Lines changed: 15 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
namespace Recca0120\Upload;
44

55
use Closure;
6-
use Illuminate\Support\Arr;
76
use Recca0120\Upload\Contracts\Uploader;
7+
use Symfony\Component\HttpFoundation\File\UploadedFile;
88
use Recca0120\Upload\Exceptions\ChunkedResponseException;
99

1010
class Receiver
@@ -16,32 +16,15 @@ class Receiver
1616
*/
1717
protected $uploader;
1818

19-
/**
20-
* $filesystem.
21-
*
22-
* @var \Recca0120\Upload\Filesystem
23-
*/
24-
protected $filesystem;
25-
26-
/**
27-
* $config.
28-
*
29-
* @var array
30-
*/
31-
protected $config;
32-
3319
/**
3420
* __construct.
3521
*
3622
* @param \Recca0120\Upload\Contracts\Uploader $uploader
37-
* @param \Recca0120\Upload\Filesystem $filesystem
38-
* @param array $config
23+
* @param \Illuminate\Http\Request $request
3924
*/
40-
public function __construct(Uploader $uploader, Filesystem $filesystem, $config = [])
25+
public function __construct(Uploader $uploader)
4126
{
4227
$this->uploader = $uploader;
43-
$this->filesystem = $filesystem;
44-
$this->config = $config;
4528
}
4629

4730
/**
@@ -54,42 +37,28 @@ public function __construct(Uploader $uploader, Filesystem $filesystem, $config
5437
*/
5538
public function receive($name, Closure $closure)
5639
{
57-
$path = Arr::get($this->config, 'path');
58-
if ($this->filesystem->isDirectory($path) === false) {
59-
$this->filesystem->makeDirectory($path, 0777, true, true);
60-
}
61-
6240
try {
63-
$uploadedFile = $this->uploader
64-
->setPath($path)
65-
->receive($name);
41+
$uploadedFile = $this->uploader->receive($name);
42+
$response = $closure($uploadedFile);
43+
$this->deleteUploadedFile($uploadedFile);
44+
45+
return $this->uploader->completedResponse($response);
6646
} catch (ChunkedResponseException $e) {
6747
return $e->getResponse();
6848
}
69-
70-
$response = $closure($uploadedFile);
71-
$file = $uploadedFile->getPathname();
72-
if ($this->filesystem->isFile($file) === true) {
73-
$this->filesystem->delete($file);
74-
}
75-
$this->cleanDirectory($path);
76-
77-
return $this->uploader->completedResponse($response);
7849
}
7950

8051
/**
81-
* cleanDirectory.
52+
* deleteUploadedFile.
8253
*
83-
* @param string $path
54+
* @param UploadedFile $uploadedFile
8455
*/
85-
protected function cleanDirectory($path)
56+
protected function deleteUploadedFile(UploadedFile $uploadedFile)
8657
{
87-
$time = time();
88-
$maxFileAge = 3600;
89-
foreach ($this->filesystem->files($path) as $file) {
90-
if ($this->filesystem->exists($file) === true && $this->filesystem->lastModified($file) < ($time - $maxFileAge)) {
91-
$this->filesystem->delete($file);
92-
}
58+
$filesystem = $this->uploader->getFilesystem();
59+
$file = $uploadedFile->getPathname();
60+
if ($filesystem->isFile($file) === true) {
61+
$filesystem->delete($file);
9362
}
9463
}
9564
}

src/UploadManager.php

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,27 @@
22

33
namespace Recca0120\Upload;
44

5+
use Illuminate\Http\Request;
56
use Illuminate\Support\Manager;
67
use Recca0120\Upload\Uploaders\FileAPI;
78
use Recca0120\Upload\Uploaders\Plupload;
89

910
class UploadManager extends Manager
1011
{
12+
/**
13+
* __construct.
14+
*
15+
* @param $app
16+
* @param $request
17+
* @param $filesystem
18+
*/
19+
public function __construct($app, Request $request = null, Filesystem $filesystem = null)
20+
{
21+
parent::__construct($app);
22+
$this->request = is_null($request) === true ? Request::capture() : $request;
23+
$this->filesystem = is_null($filesystem) === true ? new Filesystem : $filesystem;
24+
}
25+
1126
/**
1227
* default driver.
1328
*
@@ -27,10 +42,7 @@ protected function createFileapiDriver()
2742
{
2843
$config = $this->app['config']['upload'];
2944

30-
return $this->app->make(Receiver::class, [
31-
$this->app->make(FileAPI::class),
32-
'config' => $config,
33-
]);
45+
return new Receiver(new FileAPI($config, $this->request, $this->filesystem));
3446
}
3547

3648
/**
@@ -42,9 +54,6 @@ protected function createPluploadDriver()
4254
{
4355
$config = $this->app['config']['upload'];
4456

45-
return $this->app->make(Receiver::class, [
46-
$this->app->make(Plupload::class),
47-
'config' => $config,
48-
]);
57+
return new Receiver(new Plupload($config, $this->request, $this->filesystem));
4958
}
5059
}

src/UploadServiceProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public function register()
1515

1616
$this->app->singleton(Filesystem::class, Filesystem::class);
1717
$this->app->singleton(UploadManager::class, function ($app) {
18-
return new UploadManager($app);
18+
return new UploadManager($app, $app['request'], $app->make(Filesystem::class));
1919
});
2020
$this->app->singleton(Manager::class, UploadManager::class);
2121
}

src/Uploaders/Base.php

Lines changed: 73 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@ abstract class Base implements Uploader
3131
*/
3232
protected $filesystem;
3333

34+
/**
35+
* $config.
36+
*
37+
* @var array
38+
*/
39+
protected $config;
40+
3441
/**
3542
* $path.
3643
*
@@ -41,29 +48,18 @@ abstract class Base implements Uploader
4148
/**
4249
* __construct.
4350
*
51+
* @param array $path
4452
* @param \Illuminate\Http\Request $request
4553
* @param \Recca0120\Upload\Filesystem $filesystem
46-
* @param string $path
47-
*/
48-
public function __construct(Request $request, Filesystem $filesystem, $path = null)
49-
{
50-
$this->request = $request;
51-
$this->filesystem = $filesystem;
52-
$this->setPath($path);
53-
}
54-
55-
/**
56-
* setPath.
57-
*
58-
* @param string $path
59-
*
60-
* @return static
6154
*/
62-
public function setPath($path = null)
55+
public function __construct($config = [], Request $request = null, Filesystem $filesystem = null)
6356
{
64-
$this->path = is_null($path) === true ? sys_get_temp_dir() : $path;
57+
$this->request = is_null($request) === true ? Request::capture() : $request;
58+
$this->filesystem = is_null($filesystem) === true ? new Filesystem : $filesystem;
59+
$this->config = $config;
6560

66-
return $this;
61+
$path = isset($config['path']) === false ? sys_get_temp_dir().'/temp/' : $config['path'];
62+
$this->path = $path;
6763
}
6864

6965
/**
@@ -109,6 +105,65 @@ protected function receiveChunkedFile($originalName, $input, $start, $mimeType,
109105
return $this->filesystem->createUploadedFile($tmpfile, $originalName, $mimeType, $size);
110106
}
111107

108+
/**
109+
* receive.
110+
*
111+
* @param string $name
112+
*
113+
* @throws ChunkedResponseException
114+
*
115+
* @return \Symfony\Component\HttpFoundation\File\UploadedFile
116+
*/
117+
public function receive($name)
118+
{
119+
$this->makeDirectory();
120+
$uploadedFile = $this->doReceive($name);
121+
$this->cleanDirectory();
122+
123+
return $uploadedFile;
124+
}
125+
126+
/**
127+
* doReceive.
128+
*
129+
* @param string $name
130+
*
131+
* @throws ChunkedResponseException
132+
*
133+
* @return \Symfony\Component\HttpFoundation\File\UploadedFile
134+
*/
135+
abstract protected function doReceive($name);
136+
137+
/**
138+
* makeDirectory.
139+
*/
140+
protected function makeDirectory()
141+
{
142+
if ($this->filesystem->isDirectory($this->path) === false) {
143+
$this->filesystem->makeDirectory($this->path, 0777, true, true);
144+
}
145+
}
146+
147+
/**
148+
* cleanDirectory.
149+
*/
150+
protected function cleanDirectory()
151+
{
152+
$time = time();
153+
$maxFileAge = 3600;
154+
$files = $this->filesystem->files($this->path);
155+
foreach ((array) $files as $file) {
156+
if ($this->filesystem->exists($file) === true && $this->filesystem->lastModified($file) < ($time - $maxFileAge)) {
157+
$this->filesystem->delete($file);
158+
}
159+
}
160+
}
161+
162+
public function getFilesystem()
163+
{
164+
return $this->filesystem;
165+
}
166+
112167
/**
113168
* completedResponse.
114169
*

src/Uploaders/FileAPI.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ protected function getMimeType($originalName)
4747
*
4848
* @return \Symfony\Component\HttpFoundation\File\UploadedFile
4949
*/
50-
public function receive($name)
50+
protected function doReceive($name)
5151
{
5252
$contentRange = $this->request->header('content-range');
5353
if (empty($contentRange) === true) {

src/Uploaders/Plupload.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class Plupload extends Base
1616
*
1717
* @return \Symfony\Component\HttpFoundation\File\UploadedFile
1818
*/
19-
public function receive($name)
19+
protected function doReceive($name)
2020
{
2121
$uploadedFile = $this->request->file($name);
2222
$chunks = $this->request->get('chunks');

0 commit comments

Comments
 (0)