Skip to content

Commit db18d4c

Browse files
committed
move single uploaded file to storage path
1 parent 1d4120e commit db18d4c

13 files changed

+53
-17
lines changed

docs/demo/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ <h2>jQuery File Upload</h2>
8888
url: './upload.php?api=fileapi',
8989
dataType: 'json',
9090
autoUpload: false,
91-
multipart: false,
91+
multipart: true,
9292
singleFileUploads: true,
9393
maxChunkSize: 1000000,
9494
}).on('fileuploadadd', function (e, data) {

src/Api.php

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,18 @@ public function cleanDirectory(string $path): ApiContract
8585
*/
8686
public function receive(string $name): UploadedFile
8787
{
88-
return $this->isChunked($name)
89-
? $this->receiveChunked($name)
90-
: $this->request->file($name);
88+
if ($this->isChunked($name)) {
89+
return $this->receiveChunked($name);
90+
}
91+
92+
$uploadedFile = $this->request->file($name);
93+
$originalName = $uploadedFile->getClientOriginalName();
94+
$extension = $uploadedFile->getClientOriginalExtension();
95+
$mimeType = $uploadedFile->getMimeType();
96+
$target = md5($uploadedFile->getBasename()).'.'.$extension;
97+
$file = $uploadedFile->move($this->storagePath(), $target);
98+
99+
return new UploadedFile($file->getPathname(), $originalName, $mimeType, null, true);
91100
}
92101

93102
public function clearTempDirectories(): ApiContract

src/Dropzone.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ protected function receiveChunked(string $name): UploadedFile
3939

4040
$chunkFile = $this->createChunkFile($originalName, $uuid);
4141
$chunkFile->appendFile(
42-
$uploadedFile->getRealPath(),
42+
$uploadedFile->getPathname(),
4343
(int) $this->request->get('dzchunkindex')
4444
);
4545

src/FileAPI.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ protected function receiveChunked(string $name): UploadedFile
5252
$uuid = $this->request->get('token') ?? md5($originalName.$total);
5353

5454
$chunkFile = $this->createChunkFile($originalName, $uuid, $mimeType);
55-
$chunkFile->appendStream($this->request->getContent(true), $start);
55+
$chunkFile->appendStream($this->getResource($name), $start);
5656

5757
if (! $this->isCompleted($name)) {
5858
$message = ['files' => ['name' => $originalName, 'size' => $end, 'type' => $mimeType]];
@@ -62,4 +62,15 @@ protected function receiveChunked(string $name): UploadedFile
6262

6363
return $chunkFile->createUploadedFile();
6464
}
65+
66+
private function getResource(string $name)
67+
{
68+
$resource = $this->request->file($name);
69+
70+
if (! $resource) {
71+
$resource = $this->request->getContent(true);
72+
}
73+
74+
return $resource;
75+
}
6576
}

src/FineUploader.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ protected function receiveChunked(string $name): UploadedFile
3535
$chunkFile = $this->createChunkFile($this->request->get('qqfilename'), $uuid);
3636

3737
if (! $this->isCompleted($name)) {
38-
$chunkFile->appendFile($uploadedFile->getRealPath(), (int) $this->request->get('qqpartindex'));
38+
$chunkFile->appendFile($uploadedFile->getPathname(), (int) $this->request->get('qqpartindex'));
3939

4040
throw new ChunkedResponseException(['success' => true, 'uuid' => $uuid]);
4141
}

src/Plupload.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ protected function receiveChunked(string $name): UploadedFile
3232
$originalName = $this->request->get('name');
3333
$originalName = empty($originalName) ? $uploadedFile->getClientOriginalName() : $originalName;
3434
$chunkFile = $this->createChunkFile($originalName, $this->request->get('token'));
35-
$chunkFile->appendFile($uploadedFile->getRealPath(), $this->request->get('chunk'));
35+
$chunkFile->appendFile($uploadedFile->getPathname(), $this->request->get('chunk'));
3636

3737
if (! $this->isCompleted($name)) {
3838
throw new ChunkedResponseException(['jsonrpc' => '2.0', 'result' => false]);

src/Receiver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
namespace Recca0120\Upload;
44

55
use Illuminate\Http\JsonResponse;
6+
use Illuminate\Http\UploadedFile;
67
use Illuminate\Support\Arr;
78
use Recca0120\Upload\Contracts\Api as ApiContract;
89
use Recca0120\Upload\Exceptions\ChunkedResponseException;
9-
use Symfony\Component\HttpFoundation\File\UploadedFile;
1010
use Symfony\Component\HttpFoundation\Response;
1111

1212
class Receiver

tests/DropzoneTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ protected function setUp(): void
2323
*/
2424
public function testReceiveSingleFile(): void
2525
{
26-
$this->assertSame($this->uploadedFile, $this->api->receive('foo'));
26+
$this->assertTrue($this->api->receive('foo')->isFile());
2727
}
2828

2929
/**

tests/FileAPITest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ protected function setUp(): void
2424
*/
2525
public function testReceiveSingleFile(): void
2626
{
27-
$this->assertSame($this->uploadedFile, $this->api->receive('foo'));
27+
$this->assertTrue($this->api->receive('foo')->isFile());
2828
}
2929

3030
/**
@@ -52,7 +52,7 @@ public function testReceiveChunkedFile(): void
5252
self::assertEquals($size, $uploadedFile->getSize());
5353
} catch (ChunkedResponseException $e) {
5454
self::assertStringMatchesFormat(
55-
'{"files":{"name":"test.png","size":%d,"type":"image\/png"}}',
55+
'{"files":{"name":"test.png","size":%d,"type":"%s"}}',
5656
$e->getMessage()
5757
);
5858
}

tests/FilePondTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public function testReceiveSingleFile(): void
2626
{
2727
$this->request->files->replace(['foo' => $this->uploadedFile]);
2828

29-
$this->assertSame($this->uploadedFile, $this->api->receive('foo'));
29+
$this->assertTrue($this->api->receive('foo')->isFile());
3030
}
3131

3232
/**

0 commit comments

Comments
 (0)