summaryrefslogtreecommitdiff
path: root/packages/backend/src/server
diff options
context:
space:
mode:
authorかっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>2024-04-14 10:22:03 +0900
committerGitHub <noreply@github.com>2024-04-14 10:22:03 +0900
commit7cf0c18f83f82416c9b1bb5bca5b669e77240527 (patch)
tree1a59404f44ad61e2dc4cb8458e3cca8496855c9d /packages/backend/src/server
parenttest: do not use indexedDB in cypress environment due to chrome bug (#13709) (diff)
downloadsharkey-7cf0c18f83f82416c9b1bb5bca5b669e77240527.tar.gz
sharkey-7cf0c18f83f82416c9b1bb5bca5b669e77240527.tar.bz2
sharkey-7cf0c18f83f82416c9b1bb5bca5b669e77240527.zip
fix(backend): FileServerServiceでレンジリクエストの場合に適切なレスポンスコードが返らない問題を修正 (#13701)
* return 206 for every ranged response - fixes #494 (cherry picked from commit 92eec2178fd103e9ea2bcd646aacab1fb496a33b) * detect size of remote files - fixes #494 without this, remote files are assumed to have size 0 (even if we just downloaded them!) and the range-related code won't run (cherry picked from commit 960f4fcff78a1f019c9a9377853fcd90dbfb7575) --------- Co-authored-by: dakkar <dakkar@thenautilus.net>
Diffstat (limited to 'packages/backend/src/server')
-rw-r--r--packages/backend/src/server/FileServerService.ts6
1 files changed, 5 insertions, 1 deletions
diff --git a/packages/backend/src/server/FileServerService.ts b/packages/backend/src/server/FileServerService.ts
index f51d7aebca..ce7702143e 100644
--- a/packages/backend/src/server/FileServerService.ts
+++ b/packages/backend/src/server/FileServerService.ts
@@ -194,6 +194,7 @@ export class FileServerService {
reply.header('Content-Range', `bytes ${start}-${end}/${file.file.size}`);
reply.header('Accept-Ranges', 'bytes');
reply.header('Content-Length', chunksize);
+ reply.code(206);
} else {
image = {
data: fs.createReadStream(file.path),
@@ -263,7 +264,6 @@ export class FileServerService {
const parts = range.replace(/bytes=/, '').split('-');
const start = parseInt(parts[0], 10);
let end = parts[1] ? parseInt(parts[1], 10) : file.file.size - 1;
- console.log(end);
if (end > file.file.size) {
end = file.file.size - 1;
}
@@ -433,6 +433,7 @@ export class FileServerService {
reply.header('Content-Range', `bytes ${start}-${end}/${file.file.size}`);
reply.header('Accept-Ranges', 'bytes');
reply.header('Content-Length', chunksize);
+ reply.code(206);
} else {
image = {
data: fs.createReadStream(file.path),
@@ -529,6 +530,9 @@ export class FileServerService {
if (!file.storedInternal) {
if (!(file.isLink && file.uri)) return '204';
const result = await this.downloadAndDetectTypeFromUrl(file.uri);
+ if (!file.size) {
+ file.size = (await fs.promises.stat(result.path)).size;
+ }
return {
...result,
url: file.uri,