Skip to content

Commit

Permalink
move single uploaded file to storage path
Browse files Browse the repository at this point in the history
  • Loading branch information
recca0120 committed May 2, 2023
1 parent 1d4120e commit db18d4c
Show file tree
Hide file tree
Showing 13 changed files with 53 additions and 17 deletions.
2 changes: 1 addition & 1 deletion docs/demo/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ <h2>jQuery File Upload</h2>
url: './upload.php?api=fileapi',
dataType: 'json',
autoUpload: false,
multipart: false,
multipart: true,
singleFileUploads: true,
maxChunkSize: 1000000,
}).on('fileuploadadd', function (e, data) {
Expand Down
15 changes: 12 additions & 3 deletions src/Api.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,18 @@ public function cleanDirectory(string $path): ApiContract
*/
public function receive(string $name): UploadedFile
{
return $this->isChunked($name)
? $this->receiveChunked($name)
: $this->request->file($name);
if ($this->isChunked($name)) {
return $this->receiveChunked($name);
}

$uploadedFile = $this->request->file($name);
$originalName = $uploadedFile->getClientOriginalName();
$extension = $uploadedFile->getClientOriginalExtension();
$mimeType = $uploadedFile->getMimeType();
$target = md5($uploadedFile->getBasename()).'.'.$extension;
$file = $uploadedFile->move($this->storagePath(), $target);

return new UploadedFile($file->getPathname(), $originalName, $mimeType, null, true);
}

public function clearTempDirectories(): ApiContract
Expand Down
2 changes: 1 addition & 1 deletion src/Dropzone.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ protected function receiveChunked(string $name): UploadedFile

$chunkFile = $this->createChunkFile($originalName, $uuid);
$chunkFile->appendFile(
$uploadedFile->getRealPath(),
$uploadedFile->getPathname(),
(int) $this->request->get('dzchunkindex')
);

Expand Down
13 changes: 12 additions & 1 deletion src/FileAPI.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ protected function receiveChunked(string $name): UploadedFile
$uuid = $this->request->get('token') ?? md5($originalName.$total);

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

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

return $chunkFile->createUploadedFile();
}

private function getResource(string $name)
{
$resource = $this->request->file($name);

if (! $resource) {
$resource = $this->request->getContent(true);
}

return $resource;
}
}
2 changes: 1 addition & 1 deletion src/FineUploader.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ protected function receiveChunked(string $name): UploadedFile
$chunkFile = $this->createChunkFile($this->request->get('qqfilename'), $uuid);

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

throw new ChunkedResponseException(['success' => true, 'uuid' => $uuid]);
}
Expand Down
2 changes: 1 addition & 1 deletion src/Plupload.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ protected function receiveChunked(string $name): UploadedFile
$originalName = $this->request->get('name');
$originalName = empty($originalName) ? $uploadedFile->getClientOriginalName() : $originalName;
$chunkFile = $this->createChunkFile($originalName, $this->request->get('token'));
$chunkFile->appendFile($uploadedFile->getRealPath(), $this->request->get('chunk'));
$chunkFile->appendFile($uploadedFile->getPathname(), $this->request->get('chunk'));

if (! $this->isCompleted($name)) {
throw new ChunkedResponseException(['jsonrpc' => '2.0', 'result' => false]);
Expand Down
2 changes: 1 addition & 1 deletion src/Receiver.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
namespace Recca0120\Upload;

use Illuminate\Http\JsonResponse;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Arr;
use Recca0120\Upload\Contracts\Api as ApiContract;
use Recca0120\Upload\Exceptions\ChunkedResponseException;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\Response;

class Receiver
Expand Down
2 changes: 1 addition & 1 deletion tests/DropzoneTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ protected function setUp(): void
*/
public function testReceiveSingleFile(): void
{
$this->assertSame($this->uploadedFile, $this->api->receive('foo'));
$this->assertTrue($this->api->receive('foo')->isFile());
}

/**
Expand Down
4 changes: 2 additions & 2 deletions tests/FileAPITest.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ protected function setUp(): void
*/
public function testReceiveSingleFile(): void
{
$this->assertSame($this->uploadedFile, $this->api->receive('foo'));
$this->assertTrue($this->api->receive('foo')->isFile());
}

/**
Expand Down Expand Up @@ -52,7 +52,7 @@ public function testReceiveChunkedFile(): void
self::assertEquals($size, $uploadedFile->getSize());
} catch (ChunkedResponseException $e) {
self::assertStringMatchesFormat(
'{"files":{"name":"test.png","size":%d,"type":"image\/png"}}',
'{"files":{"name":"test.png","size":%d,"type":"%s"}}',
$e->getMessage()
);
}
Expand Down
2 changes: 1 addition & 1 deletion tests/FilePondTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public function testReceiveSingleFile(): void
{
$this->request->files->replace(['foo' => $this->uploadedFile]);

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

/**
Expand Down
2 changes: 1 addition & 1 deletion tests/FineUploaderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ protected function setUp(): void
*/
public function testReceiveSingleFile(): void
{
$this->assertSame($this->uploadedFile, $this->api->receive('foo'));
$this->assertTrue($this->api->receive('foo')->isFile());
}

/**
Expand Down
2 changes: 1 addition & 1 deletion tests/PluploadTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ protected function setUp(): void
*/
public function testReceiveUploadSingleFile(): void
{
$this->assertSame($this->uploadedFile, $this->api->receive('foo'));
$this->assertTrue($this->api->receive('foo')->isFile());
}

/**
Expand Down
20 changes: 18 additions & 2 deletions tests/TestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ protected function setUp(): void
'storage' => $this->root->url().'/storage',
];

$this->uploadedFile = UploadedFile::fake()->image('test.png');
$newUploadedFile = $this->givenUploadedFile();
$this->uploadedFile = $newUploadedFile;

$this->request = Request::createFromGlobals();
$this->request->setMethod('POST');
Expand Down Expand Up @@ -85,6 +86,21 @@ protected function setRequestContent(string $content): void
$reflection = $reflectedClass->getProperty('content');
$reflection->setAccessible(true);
$reflection->setValue($this->request, $content);
file_put_contents($this->uploadedFile->getRealPath(), $content);
file_put_contents($this->uploadedFile->getPathname(), $content);
}

private function givenUploadedFile(): UploadedFile
{
$name = 'test.png';
$temp = $this->root->url().'/temp/';
$file = $temp.$name;
mkdir($temp);

ob_start();
$image = imagecreatetruecolor(10, 10);
imagepng($image);
file_put_contents($file, ob_get_clean());

return new UploadedFile($file, $name, 'image/png', null, true);
}
}

0 comments on commit db18d4c

Please sign in to comment.