Skip to content

Commit c4ef17e

Browse files
Merge pull request #648 from appwrite/fix-chunked-upload
2 parents 60564c6 + 64e6376 commit c4ef17e

File tree

13 files changed

+38
-38
lines changed

13 files changed

+38
-38
lines changed

templates/android/library/src/main/java/io/appwrite/Client.kt.twig

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ class Client @JvmOverloads constructor(
374374
responseType = Map::class.java,
375375
)
376376
val chunksUploaded = current["chunksUploaded"] as Long
377-
offset = (chunksUploaded * CHUNK_SIZE).coerceAtMost(size)
377+
offset = chunksUploaded * CHUNK_SIZE
378378
}
379379

380380
while (offset < size) {
@@ -385,7 +385,7 @@ class Client @JvmOverloads constructor(
385385
}
386386
"bytes" -> {
387387
val end = if (offset + CHUNK_SIZE < size) {
388-
offset + CHUNK_SIZE
388+
offset + CHUNK_SIZE - 1
389389
} else {
390390
size - 1
391391
}
@@ -405,7 +405,7 @@ class Client @JvmOverloads constructor(
405405
)
406406

407407
headers["Content-Range"] =
408-
"bytes $offset-${((offset + CHUNK_SIZE) - 1).coerceAtMost(size)}/$size"
408+
"bytes $offset-${((offset + CHUNK_SIZE) - 1).coerceAtMost(size - 1)}/$size"
409409

410410
result = call(
411411
method = "POST",

templates/cli/lib/commands/command.js.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ const {{ service.name | caseLower }}{{ method.name | caseUcfirst }} = async ({ {
164164

165165
for (counter; counter < totalCounters; counter++) {
166166
const start = (counter * libClient.CHUNK_SIZE);
167-
const end = Math.min((((counter * libClient.CHUNK_SIZE) + libClient.CHUNK_SIZE) - 1), size);
167+
const end = Math.min((((counter * libClient.CHUNK_SIZE) + libClient.CHUNK_SIZE) - 1), size - 1);
168168

169169
headers['content-range'] = 'bytes ' + start + '-' + end + '/' + size;
170170

templates/dart/lib/src/client_browser.dart.twig

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,18 +114,18 @@ class ClientBrowser extends ClientBase with ClientMixin {
114114
headers: headers,
115115
);
116116
final int chunksUploaded = res.data['chunksUploaded'] as int;
117-
offset = min(size, chunksUploaded * CHUNK_SIZE);
117+
offset = chunksUploaded * CHUNK_SIZE;
118118
} on {{spec.title | caseUcfirst}}Exception catch (_) {}
119119
}
120120

121121
while (offset < size) {
122-
List<int> chunk;
123-
final end = min(offset + CHUNK_SIZE, size);
122+
var chunk;
123+
final end = min(offset + CHUNK_SIZE - 1, size - 1);
124124
chunk = file.bytes!.getRange(offset, end).toList();
125125
params[paramName] =
126126
http.MultipartFile.fromBytes(paramName, chunk, filename: file.filename);
127127
headers['content-range'] =
128-
'bytes $offset-${min<int>(((offset + CHUNK_SIZE) - 1), size)}/$size';
128+
'bytes $offset-${min<int>((offset + CHUNK_SIZE - 1), size - 1)}/$size';
129129
res = await call(HttpMethod.post,
130130
path: path, headers: headers, params: params);
131131
offset += CHUNK_SIZE;
@@ -134,8 +134,8 @@ class ClientBrowser extends ClientBase with ClientMixin {
134134
}
135135
final progress = UploadProgress(
136136
$id: res.data['\$id'] ?? '',
137-
progress: min(offset - 1, size) / size * 100,
138-
sizeUploaded: min(offset - 1, size),
137+
progress: min(offset, size) / size * 100,
138+
sizeUploaded: min(offset, size),
139139
chunksTotal: res.data['chunksTotal'] ?? 0,
140140
chunksUploaded: res.data['chunksUploaded'] ?? 0,
141141
);

templates/dart/lib/src/client_io.dart.twig

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ class ClientIO extends ClientBase with ClientMixin {
143143
headers: headers,
144144
);
145145
final int chunksUploaded = res.data['chunksUploaded'] as int;
146-
offset = min(size, chunksUploaded * CHUNK_SIZE);
146+
offset = chunksUploaded * CHUNK_SIZE;
147147
} on {{spec.title | caseUcfirst}}Exception catch (_) {}
148148
}
149149

@@ -156,7 +156,7 @@ class ClientIO extends ClientBase with ClientMixin {
156156
while (offset < size) {
157157
List<int> chunk = [];
158158
if (file.bytes != null) {
159-
final end = min(offset + CHUNK_SIZE-1, size-1);
159+
final end = min(offset + CHUNK_SIZE - 1, size - 1);
160160
chunk = file.bytes!.getRange(offset, end).toList();
161161
} else {
162162
raf!.setPositionSync(offset);
@@ -165,7 +165,7 @@ class ClientIO extends ClientBase with ClientMixin {
165165
params[paramName] =
166166
http.MultipartFile.fromBytes(paramName, chunk, filename: file.filename);
167167
headers['content-range'] =
168-
'bytes $offset-${min<int>(((offset + CHUNK_SIZE) - 1), size)}/$size';
168+
'bytes $offset-${min<int>((offset + CHUNK_SIZE - 1), size - 1)}/$size';
169169
res = await call(HttpMethod.post,
170170
path: path, headers: headers, params: params);
171171
offset += CHUNK_SIZE;
@@ -174,8 +174,8 @@ class ClientIO extends ClientBase with ClientMixin {
174174
}
175175
final progress = UploadProgress(
176176
$id: res.data['\$id'] ?? '',
177-
progress: min(offset - 1, size) / size * 100,
178-
sizeUploaded: min(offset - 1, size),
177+
progress: min(offset, size) / size * 100,
178+
sizeUploaded: min(offset, size),
179179
chunksTotal: res.data['chunksTotal'] ?? 0,
180180
chunksUploaded: res.data['chunksUploaded'] ?? 0,
181181
);

templates/flutter/lib/src/client_browser.dart.twig

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -143,18 +143,18 @@ class ClientBrowser extends ClientBase with ClientMixin {
143143
headers: headers,
144144
);
145145
final int chunksUploaded = res.data['chunksUploaded'] as int;
146-
offset = min(size, chunksUploaded * CHUNK_SIZE);
146+
offset = chunksUploaded * CHUNK_SIZE;
147147
} on {{spec.title | caseUcfirst}}Exception catch (_) {}
148148
}
149149

150150
while (offset < size) {
151151
var chunk;
152-
final end = min(offset + CHUNK_SIZE, size);
152+
final end = min(offset + CHUNK_SIZE - 1, size - 1);
153153
chunk = file.bytes!.getRange(offset, end).toList();
154154
params[paramName] =
155155
http.MultipartFile.fromBytes(paramName, chunk, filename: file.filename);
156156
headers['content-range'] =
157-
'bytes $offset-${min<int>(((offset + CHUNK_SIZE) - 1), size)}/$size';
157+
'bytes $offset-${min<int>((offset + CHUNK_SIZE - 1), size - 1)}/$size';
158158
res = await call(HttpMethod.post,
159159
path: path, headers: headers, params: params);
160160
offset += CHUNK_SIZE;
@@ -163,8 +163,8 @@ class ClientBrowser extends ClientBase with ClientMixin {
163163
}
164164
final progress = UploadProgress(
165165
$id: res.data['\$id'] ?? '',
166-
progress: min(offset - 1, size) / size * 100,
167-
sizeUploaded: min(offset - 1, size),
166+
progress: min(offset, size) / size * 100,
167+
sizeUploaded: min(offset, size),
168168
chunksTotal: res.data['chunksTotal'] ?? 0,
169169
chunksUploaded: res.data['chunksUploaded'] ?? 0,
170170
);

templates/flutter/lib/src/client_io.dart.twig

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ class ClientIO extends ClientBase with ClientMixin {
263263
headers: headers,
264264
);
265265
final int chunksUploaded = res.data['chunksUploaded'] as int;
266-
offset = min(size, chunksUploaded * CHUNK_SIZE);
266+
offset = chunksUploaded * CHUNK_SIZE;
267267
} on {{spec.title | caseUcfirst}}Exception catch (_) {}
268268
}
269269

@@ -276,7 +276,7 @@ class ClientIO extends ClientBase with ClientMixin {
276276
while (offset < size) {
277277
List<int> chunk = [];
278278
if (file.bytes != null) {
279-
final end = min(offset + CHUNK_SIZE-1, size-1);
279+
final end = min(offset + CHUNK_SIZE - 1, size - 1);
280280
chunk = file.bytes!.getRange(offset, end).toList();
281281
} else {
282282
raf!.setPositionSync(offset);
@@ -285,7 +285,7 @@ class ClientIO extends ClientBase with ClientMixin {
285285
params[paramName] =
286286
http.MultipartFile.fromBytes(paramName, chunk, filename: file.filename);
287287
headers['content-range'] =
288-
'bytes $offset-${min<int>(((offset + CHUNK_SIZE) - 1), size)}/$size';
288+
'bytes $offset-${min<int>((offset + CHUNK_SIZE - 1), size - 1)}/$size';
289289
res = await call(HttpMethod.post,
290290
path: path, headers: headers, params: params);
291291
offset += CHUNK_SIZE;
@@ -294,8 +294,8 @@ class ClientIO extends ClientBase with ClientMixin {
294294
}
295295
final progress = UploadProgress(
296296
$id: res.data['\$id'] ?? '',
297-
progress: min(offset - 1, size) / size * 100,
298-
sizeUploaded: min(offset - 1, size),
297+
progress: min(offset, size) / size * 100,
298+
sizeUploaded: min(offset, size),
299299
chunksTotal: res.data['chunksTotal'] ?? 0,
300300
chunksUploaded: res.data['chunksUploaded'] ?? 0,
301301
);

templates/kotlin/src/main/kotlin/io/appwrite/Client.kt.twig

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ class Client @JvmOverloads constructor(
333333
responseType = Map::class.java,
334334
)
335335
val chunksUploaded = current["chunksUploaded"] as Long
336-
offset = (chunksUploaded * CHUNK_SIZE).coerceAtMost(size)
336+
offset = chunksUploaded * CHUNK_SIZE
337337
}
338338

339339
while (offset < size) {
@@ -344,7 +344,7 @@ class Client @JvmOverloads constructor(
344344
}
345345
"bytes" -> {
346346
val end = if (offset + CHUNK_SIZE < size) {
347-
offset + CHUNK_SIZE
347+
offset + CHUNK_SIZE - 1
348348
} else {
349349
size - 1
350350
}
@@ -364,7 +364,7 @@ class Client @JvmOverloads constructor(
364364
)
365365

366366
headers["Content-Range"] =
367-
"bytes $offset-${((offset + CHUNK_SIZE) - 1).coerceAtMost(size)}/$size"
367+
"bytes $offset-${((offset + CHUNK_SIZE) - 1).coerceAtMost(size - 1)}/$size"
368368

369369
result = call(
370370
method = "POST",

templates/node/base/requests/file.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
}
4141

4242
const start = currentChunkStart;
43-
const end = Math.min(((start + client.CHUNK_SIZE) - 1), size);
43+
const end = Math.min(((start + client.CHUNK_SIZE) - 1), size - 1);
4444

4545
if(!lastUpload || currentChunkStart !== 0) {
4646
headers['content-range'] = 'bytes ' + start + '-' + end + '/' + size;

templates/php/base/requests/file.twig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
$chunk = substr($file->getData(), $start, Client::CHUNK_SIZE);
6969
}
7070
$params['{{ parameter.name }}'] = new \CURLFile('data://' . $mimeType . ';base64,' . base64_encode($chunk), $mimeType, $postedName);
71-
$headers['content-range'] = 'bytes ' . ($counter * Client::CHUNK_SIZE) . '-' . min(((($counter * Client::CHUNK_SIZE) + Client::CHUNK_SIZE) - 1), $size) . '/' . $size;
71+
$headers['content-range'] = 'bytes ' . ($counter * Client::CHUNK_SIZE) . '-' . min(((($counter * Client::CHUNK_SIZE) + Client::CHUNK_SIZE) - 1), $size - 1) . '/' . $size;
7272
if(!empty($id)) {
7373
$headers['x-{{spec.title | caseLower }}-id'] = $id;
7474
}
@@ -81,7 +81,7 @@
8181
if($onProgress !== null) {
8282
$onProgress([
8383
'$id' => $response['$id'],
84-
'progress' => min(((($counter * Client::CHUNK_SIZE) + Client::CHUNK_SIZE) - 1), $size) / $size * 100,
84+
'progress' => min(((($counter * Client::CHUNK_SIZE) + Client::CHUNK_SIZE)), $size) / $size * 100,
8585
'sizeUploaded' => min($counter * Client::CHUNK_SIZE),
8686
'chunksTotal' => $response['chunksTotal'],
8787
'chunksUploaded' => $response['chunksUploaded'],

templates/python/package/client.py.twig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ class Client:
160160
input_file.data = input[offset:end]
161161

162162
params[param_name] = input_file
163-
headers["content-range"] = f'bytes {offset}-{min((offset + self._chunk_size) - 1, size)}/{size}'
163+
headers["content-range"] = f'bytes {offset}-{min((offset + self._chunk_size) - 1, size - 1)}/{size}'
164164

165165
result = self.call(
166166
'post',
@@ -175,7 +175,7 @@ class Client:
175175
headers["x-{{ spec.title | caseLower }}-id"] = result["$id"]
176176

177177
if on_progress is not None:
178-
end = min((((counter * self._chunk_size) + self._chunk_size) - 1), size)
178+
end = min((((counter * self._chunk_size) + self._chunk_size) - 1), size - 1)
179179
on_progress({
180180
"$id": result["$id"],
181181
"progress": min(offset, size)/size * 100,

0 commit comments

Comments
 (0)