fullpwerr commited on
Commit
ae3bc61
·
verified ·
1 Parent(s): d79d76f

Update app.js

Browse files
Files changed (1) hide show
  1. app.js +21 -22
app.js CHANGED
@@ -12,12 +12,13 @@ const EXPIRATION_TIME = 24 * 60 * 60 * 1000; // 24 jam dalam milidetik
12
  const META_FILE = path.join(__dirname, "files.json");
13
 
14
  // Load metadata file (kalau ada)
15
- let fileData = {};
16
  if (fs.existsSync(META_FILE)) {
17
  fileData = JSON.parse(fs.readFileSync(META_FILE));
18
  }
19
 
20
  function formatRemainingTime(expiresAt) {
 
21
  const remainingMs = expiresAt - Date.now();
22
  if (remainingMs <= 0) return "Expired";
23
 
@@ -28,54 +29,49 @@ function formatRemainingTime(expiresAt) {
28
  return `${hours}h ${minutes}m ${seconds}s`;
29
  }
30
 
 
31
  const app = express();
32
  const port = process.env.PORT || 7860;
33
 
34
- const uploadDir = path.join(__dirname, "files");
35
- if (!fs.existsSync(uploadDir)) {
36
- fs.mkdirSync(uploadDir, { recursive: true });
37
  }
38
 
39
  app.use(cors());
40
- app.use("/files", express.static(uploadDir));
41
 
42
  const storage = multer.diskStorage({
43
- destination: (req, file, cb) => {
44
- cb(null, FILE_DIR);
45
- },
46
- filename: (req, file, cb) => {
47
- const uniqueName = `${Date.now()}-${file.originalname}`;
48
- cb(null, uniqueName);
49
- }
50
  });
51
 
52
  const upload = multer({ storage });
53
 
54
  app.post("/upload", upload.single("file"), (req, res) => {
55
- if (!req.file) {
56
- return res.status(400).json({ success: false, message: "No file uploaded" });
57
- }
58
 
59
  const filePath = req.file.filename;
60
- const expiresAt = Date.now() + EXPIRATION_TIME;
 
 
61
  fileData[filePath] = expiresAt;
62
  fs.writeFileSync(META_FILE, JSON.stringify(fileData));
63
 
64
  res.json({
65
  success: true,
66
- file_url: `http://yourdomain.com/files/${filePath}`,
67
  expires_in: formatRemainingTime(expiresAt) // Format sesuai sisa waktu
68
  });
69
  });
70
 
71
  app.get("/files", (req, res) => {
72
- fs.readdir(uploadDir, (err, files) => {
73
  if (err) return res.status(500).json({ success: false, message: "Error reading files" });
74
 
75
  const fileList = files.map(filename => ({
76
  filename,
77
  file_url: `${req.protocol}://${req.get("host")}/files/${filename}`,
78
- expires_in: formatRemainingTime(fileData[filename])
79
  }));
80
 
81
  res.json({ success: true, files: fileList });
@@ -83,11 +79,14 @@ app.get("/files", (req, res) => {
83
  });
84
 
85
  app.delete("/files/:filename", (req, res) => {
86
- const filePath = path.join(uploadDir, req.params.filename);
87
-
88
  fs.unlink(filePath, err => {
89
  if (err) return res.status(404).json({ success: false, message: "File not found" });
90
 
 
 
 
91
  res.json({ success: true, message: "File deleted successfully!" });
92
  });
93
  });
@@ -197,4 +196,4 @@ setInterval(() => {
197
 
198
  app.listen(port, () => {
199
  console.log("Listening on http://localhost:" + port);
200
- });
 
12
  const META_FILE = path.join(__dirname, "files.json");
13
 
14
  // Load metadata file (kalau ada)
15
+ let fileData = fs.existsSync(META_FILE) ? JSON.parse(fs.readFileSync(META_FILE)) : {};
16
  if (fs.existsSync(META_FILE)) {
17
  fileData = JSON.parse(fs.readFileSync(META_FILE));
18
  }
19
 
20
  function formatRemainingTime(expiresAt) {
21
+ if (!expiresAt || isNaN(expiresAt)) return "Unknown";
22
  const remainingMs = expiresAt - Date.now();
23
  if (remainingMs <= 0) return "Expired";
24
 
 
29
  return `${hours}h ${minutes}m ${seconds}s`;
30
  }
31
 
32
+
33
  const app = express();
34
  const port = process.env.PORT || 7860;
35
 
36
+ if (!fs.existsSync(FILE_DIR)) {
37
+ fs.mkdirSync(FILE_DIR, { recursive: true });
 
38
  }
39
 
40
  app.use(cors());
41
+ app.use("/files", express.static(FILE_DIR));
42
 
43
  const storage = multer.diskStorage({
44
+ destination: (req, file, cb) => cb(null, FILE_DIR),
45
+ filename: (req, file, cb) => cb(null, `${Date.now()}-${file.originalname}`)
 
 
 
 
 
46
  });
47
 
48
  const upload = multer({ storage });
49
 
50
  app.post("/upload", upload.single("file"), (req, res) => {
51
+ if (!req.file) return res.status(400).json({ success: false, message: "No file uploaded" });
 
 
52
 
53
  const filePath = req.file.filename;
54
+ const customExpiration = req.body.expires_in ? parseInt(req.body.expires_in) * 1000 : DEFAULT_EXPIRATION;
55
+ const expiresAt = Date.now() + customExpiration;
56
+
57
  fileData[filePath] = expiresAt;
58
  fs.writeFileSync(META_FILE, JSON.stringify(fileData));
59
 
60
  res.json({
61
  success: true,
62
+ file_url: `${req.protocol}://${req.get("host")}/files/${filePath}`,
63
  expires_in: formatRemainingTime(expiresAt) // Format sesuai sisa waktu
64
  });
65
  });
66
 
67
  app.get("/files", (req, res) => {
68
+ fs.readdir(FILE_DIR, (err, files) => {
69
  if (err) return res.status(500).json({ success: false, message: "Error reading files" });
70
 
71
  const fileList = files.map(filename => ({
72
  filename,
73
  file_url: `${req.protocol}://${req.get("host")}/files/${filename}`,
74
+ expires_in: formatRemainingTime(fileData[filename] || 0)
75
  }));
76
 
77
  res.json({ success: true, files: fileList });
 
79
  });
80
 
81
  app.delete("/files/:filename", (req, res) => {
82
+ const filePath = path.join(FILE_DIR, req.params.filename);
83
+
84
  fs.unlink(filePath, err => {
85
  if (err) return res.status(404).json({ success: false, message: "File not found" });
86
 
87
+ delete fileData[req.params.filename];
88
+ fs.writeFileSync(META_FILE, JSON.stringify(fileData));
89
+
90
  res.json({ success: true, message: "File deleted successfully!" });
91
  });
92
  });
 
196
 
197
  app.listen(port, () => {
198
  console.log("Listening on http://localhost:" + port);
199
+ });