Skip to content

Commit 645a29e

Browse files
authored
Fix file identifier (#50)
* Fix file identifier * Change file identifier generation parameters * Fix bluimp driver file ID generation * Style CI fix * Change parameter order * Update tests
1 parent 6eb42a4 commit 645a29e

File tree

4 files changed

+27
-37
lines changed

4 files changed

+27
-37
lines changed

src/Driver/BlueimpUploadDriver.php

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -100,26 +100,32 @@ public function download(Request $request, StorageConfig $config): Response
100100
{
101101
$download = $request->query('download', false);
102102
if ($download !== false) {
103-
$filename = $request->query($this->fileParam);
103+
$uuid = $request->query($this->fileParam);
104104

105-
return $this->fileResponse($filename, $config);
105+
return $this->fileResponse($uuid, $config);
106106
}
107107

108-
$request->validate([$this->fileParam => 'required']);
109-
$filename = $request->query($this->fileParam);
108+
$request->validate([
109+
$this->fileParam => 'required',
110+
'totalSize' => 'required',
111+
]);
112+
113+
$originalFilename = $request->query($this->fileParam);
114+
$totalSize = $request->query('totalSize');
115+
$uuid = $this->identifier->generateFileIdentifier($totalSize, $originalFilename);
110116

111-
if (!$this->chunkExists($config, $filename)) {
117+
if (!$this->chunkExists($config, $uuid)) {
112118
return new JsonResponse([
113119
'file' => null,
114120
]);
115121
}
116122

117-
$chunk = Arr::last($this->chunks($config, $filename));
123+
$chunk = Arr::last($this->chunks($config, $uuid));
118124
$size = explode('-', basename($chunk))[1] + 1;
119125

120126
return new JsonResponse([
121127
'file' => [
122-
'name' => $filename,
128+
'name' => $originalFilename,
123129
'size' => $size,
124130
],
125131
]);
@@ -148,7 +154,7 @@ public function save(Request $request, StorageConfig $config, Closure $fileUploa
148154
throw new BadRequestHttpException($e->getMessage(), $e);
149155
}
150156

151-
$uuid = $this->identifier->generateUploadedFileIdentifierName($file);
157+
$uuid = $this->identifier->generateFileIdentifier($range->getTotal(), $file->getClientOriginalName());
152158

153159
$chunks = $this->storeChunk($config, $range, $file, $uuid);
154160

@@ -178,7 +184,6 @@ public function save(Request $request, StorageConfig $config, Closure $fileUploa
178184
public function delete(Request $request, StorageConfig $config): Response
179185
{
180186
$filename = $request->post($this->fileParam);
181-
182187
$path = $config->getMergedDirectory() . '/' . $filename;
183188
Storage::disk($config->getDisk())->delete($path);
184189

src/Identifier/Identifier.php

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
namespace CodingSocks\ChunkUploader\Identifier;
44

5-
use Illuminate\Http\UploadedFile;
6-
75
abstract class Identifier
86
{
97
/**
@@ -14,14 +12,15 @@ abstract class Identifier
1412
abstract public function generateIdentifier(string $data): string;
1513

1614
/**
17-
* @param \Illuminate\Http\UploadedFile $file
15+
* @param float $totalSize
16+
* @param string $originalFilename
1817
*
1918
* @return string
2019
*/
21-
public function generateUploadedFileIdentifierName(UploadedFile $file): string
20+
public function generateFileIdentifier(float $totalSize, string $originalFilename): string
2221
{
23-
$data = $file->getClientOriginalName();
22+
$data = $totalSize . '_' . $originalFilename;
2423

25-
return $this->generateIdentifier($data) . '.' . $file->guessExtension();
24+
return $this->generateIdentifier($data);
2625
}
2726
}

tests/Driver/BlueimpUploadDriverTest.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,11 @@ public function testDownload()
9494

9595
public function testResume()
9696
{
97-
$this->createFakeLocalFile('chunks/2494cefe4d234bd331aeb4514fe97d810efba29b.txt', '000-099');
97+
$this->createFakeLocalFile('chunks/4f0fce4ab7d03efd246b25d3c9e6546a0d65794d', '000-099');
9898

9999
$request = Request::create('', Request::METHOD_GET, [
100100
'file' => '2494cefe4d234bd331aeb4514fe97d810efba29b.txt',
101+
'totalSize' => '200',
101102
]);
102103

103104
$response = $this->createTestResponse($this->handler->handle($request));
@@ -149,7 +150,7 @@ public function testUploadFirstChunk()
149150
$response->assertSuccessful();
150151
$response->assertJson(['done' => 50]);
151152

152-
Storage::disk('local')->assertExists('chunks/2494cefe4d234bd331aeb4514fe97d810efba29b.txt/000-099');
153+
Storage::disk('local')->assertExists('chunks/5d5115c1064c6e9dead0b7b71506bdfe273fd11c/000-099');
153154

154155
Event::assertNotDispatched(FileUploaded::class, function ($event) use ($file) {
155156
return $event->file = $file->hashName('merged');
@@ -190,7 +191,7 @@ public function testUploadLastChunk()
190191
$response->assertSuccessful();
191192
$response->assertJson(['done' => 100]);
192193

193-
Storage::disk('local')->assertExists('chunks/2494cefe4d234bd331aeb4514fe97d810efba29b.txt/100-199');
194+
Storage::disk('local')->assertExists('chunks/5d5115c1064c6e9dead0b7b71506bdfe273fd11c/100-199');
194195
Storage::disk('local')->assertExists($file->hashName('merged'));
195196

196197
Event::assertDispatched(FileUploaded::class, function ($event) use ($file) {

tests/Identifier/SessionIdentifierTest.php

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
namespace CodingSocks\ChunkUploader\Tests\Identifier;
44

5-
use Illuminate\Http\UploadedFile;
65
use Illuminate\Support\Facades\Session;
76
use CodingSocks\ChunkUploader\Identifier\SessionIdentifier;
87
use Orchestra\Testbench\TestCase;
@@ -26,27 +25,13 @@ protected function setUp(): void
2625

2726
public function testGenerateIdentifier()
2827
{
29-
$identifier = $this->identifier->generateIdentifier('test.txt');
30-
$this->assertEquals('2494cefe4d234bd331aeb4514fe97d810efba29b', $identifier);
31-
}
32-
33-
public function testGenerateIdentifierWithoutExtension()
34-
{
35-
$identifier = $this->identifier->generateIdentifier('test');
36-
$this->assertEquals('3b7b99bf70a98a544319cf3bad9e912e1b89984d', $identifier);
28+
$identifier = $this->identifier->generateIdentifier('any_string');
29+
$this->assertEquals('b41d07049729f460973494395f9bf8fe23834d48', $identifier);
3730
}
3831

3932
public function testUploadedFileIdentifierName()
4033
{
41-
$file = UploadedFile::fake()->create('test.txt', 100);
42-
$identifier = $this->identifier->generateUploadedFileIdentifierName($file);
43-
$this->assertEquals('2494cefe4d234bd331aeb4514fe97d810efba29b.txt', $identifier);
44-
}
45-
46-
public function testUploadedFileIdentifierNameWithoutExtension()
47-
{
48-
$file = UploadedFile::fake()->create('test', 100);
49-
$identifier = $this->identifier->generateUploadedFileIdentifierName($file);
50-
$this->assertEquals('3b7b99bf70a98a544319cf3bad9e912e1b89984d.bin', $identifier);
34+
$identifier = $this->identifier->generateFileIdentifier(200, 'any_filename.ext');
35+
$this->assertEquals('ec1669bf4dee72e6dd30b94d2d29413601f1b69b', $identifier);
5136
}
5237
}

0 commit comments

Comments
 (0)