File size: 2,292 Bytes
ca63dd4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
import * as fs from 'fs';
import * as path from 'path';
import { Context } from 'koa';
const UPLOAD_DIR = path.join(__dirname, '../../uploads');
export const getFileNameList = async (ctx: Context) => {
try {
const files = fs.readdirSync(UPLOAD_DIR);
ctx.body = { files };
} catch (error: any) {
ctx.status = 500;
ctx.body = { error: error.message };
}
};
export const uploadFile = async (ctx: Context) => {
try {
if (!ctx.request.body || !ctx.request.header['content-disposition']) {
ctx.status = 400;
ctx.body = { error: 'No file or file name uploaded' };
return;
}
const fileBuffer = ctx.request.body;
const contentDisposition = ctx.request.header['content-disposition'];
const fileNameMatch = contentDisposition.match(/filename=(.+)/);
if (!fileNameMatch) {
ctx.status = 400;
ctx.body = { error: 'File name not found in Content-Disposition header' };
return;
}
const fileName = fileNameMatch[1];
const targetPath = path.join(UPLOAD_DIR, fileName);
fs.writeFileSync(targetPath, fileBuffer);
ctx.body = { message: 'File uploaded successfully' };
} catch (error: any) {
ctx.status = 500;
ctx.body = { error: error.message };
}
};
export const getFile = async (ctx: Context) => {
try {
const fileName = ctx.params.fileName;
const filePath = path.join(UPLOAD_DIR, fileName);
if (!fs.existsSync(filePath)) {
ctx.status = 404;
ctx.body = { error: 'File not found' };
return;
}
ctx.attachment(fileName);
ctx.body = fs.createReadStream(filePath);
} catch (error: any) {
ctx.status = 500;
ctx.body = { error: error.message };
}
};
export const deleteFile = async (ctx: Context) => {
try {
const { fileName } = ctx.request.body;
if (!fileName) {
ctx.status = 400;
ctx.body = { error: 'File name is required' };
return;
}
const filePath = path.join(UPLOAD_DIR, fileName);
if (!fs.existsSync(filePath)) {
ctx.status = 404;
ctx.body = { error: 'File not found' };
return;
}
fs.unlinkSync(filePath);
ctx.body = { message: 'File deleted successfully' };
} catch (error: any) {
ctx.status = 500;
ctx.body = { error: error.message };
}
};
|