Okay, I fixed issue with special characters in file's names passed to proxy by serving files by NGiNX. So now I add a /files prefix to a full path. So previous commit is partly reverted. :) And need in file-type package is eliminated.
This commit is contained in:
parent
f728f4de4f
commit
1c632dcf80
23
files.js
23
files.js
@ -5,7 +5,6 @@ const Koa = require("koa");
|
|||||||
const koaPug = require("koa-pug");
|
const koaPug = require("koa-pug");
|
||||||
const koaRouter = require("koa-router");
|
const koaRouter = require("koa-router");
|
||||||
const koaRange = require("koa-range");
|
const koaRange = require("koa-range");
|
||||||
const FileType = require("file-type");
|
|
||||||
|
|
||||||
const config = require("./config");
|
const config = require("./config");
|
||||||
const util = require("./util");
|
const util = require("./util");
|
||||||
@ -44,17 +43,7 @@ function sortByNameField(a, b) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fileType(name) {
|
async function getDirectoryList(dir_path, orig_url) {
|
||||||
let f = await FileType.fromStream(fs.createReadStream(name));
|
|
||||||
if (f === undefined) {
|
|
||||||
if (name.endsWith("txt"))
|
|
||||||
return "text/plain";
|
|
||||||
} else
|
|
||||||
return f.mime;
|
|
||||||
return "octet-stream";
|
|
||||||
}
|
|
||||||
|
|
||||||
async function getDirectoryList(dir_path) {
|
|
||||||
let dirs = [];
|
let dirs = [];
|
||||||
let files = [];
|
let files = [];
|
||||||
let total_files_size = 0;
|
let total_files_size = 0;
|
||||||
@ -73,7 +62,7 @@ async function getDirectoryList(dir_path) {
|
|||||||
total_files_size += stat.size;
|
total_files_size += stat.size;
|
||||||
files.push({
|
files.push({
|
||||||
name: dirent.name,
|
name: dirent.name,
|
||||||
link: `${encodeURIComponent(dirent.name)}`,
|
link: `/files${orig_url}${encodeURIComponent(dirent.name)}`,
|
||||||
datetime: util.datetime(stat.mtime, util.formats.file_date),
|
datetime: util.datetime(stat.mtime, util.formats.file_date),
|
||||||
size: +s,
|
size: +s,
|
||||||
size_unit: u });
|
size_unit: u });
|
||||||
@ -93,7 +82,7 @@ function setRoutes(router) {
|
|||||||
let stat = fs.lstatSync(file_path);
|
let stat = fs.lstatSync(file_path);
|
||||||
if (stat.isDirectory()) {
|
if (stat.isDirectory()) {
|
||||||
const [items, total_directories, total_files, total_files_size]
|
const [items, total_directories, total_files, total_files_size]
|
||||||
= await getDirectoryList(file_path);
|
= await getDirectoryList(file_path, decodeURI(ctx.originalUrl));
|
||||||
await ctx.render('index', {
|
await ctx.render('index', {
|
||||||
title: "/ Files",
|
title: "/ Files",
|
||||||
description: "File share.",
|
description: "File share.",
|
||||||
@ -103,12 +92,6 @@ function setRoutes(router) {
|
|||||||
total_files_size: total_files_size,
|
total_files_size: total_files_size,
|
||||||
total_directories: total_directories,
|
total_directories: total_directories,
|
||||||
items: items });
|
items: items });
|
||||||
} else {
|
|
||||||
ctx.type = await fileType(file_path);
|
|
||||||
ctx.set("Content-Length", stat.size);
|
|
||||||
|
|
||||||
const stream = fs.createReadStream(file_path);
|
|
||||||
ctx.body = stream;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
"author": "Arav",
|
"author": "Arav",
|
||||||
"license": "GPLv3",
|
"license": "GPLv3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"file-type": "^16.2.0",
|
|
||||||
"koa": "^2.13.1",
|
"koa": "^2.13.1",
|
||||||
"koa-body": "^4.2.0",
|
"koa-body": "^4.2.0",
|
||||||
"koa-pug": "^4.0.4",
|
"koa-pug": "^4.0.4",
|
||||||
|
Loading…
Reference in New Issue
Block a user