(wip) file upload api;
upload new permit
This commit is contained in:
0
pages/api/content.ts
Normal file
0
pages/api/content.ts
Normal file
@ -1,41 +1,63 @@
|
||||
import path from 'path';
|
||||
import { promises as fs } from 'fs';
|
||||
import express from 'express';
|
||||
import { createUploadMiddleware, processFiles, listFiles, deleteFile } from './fileHandlers';
|
||||
|
||||
import type { NextApiRequest, NextApiResponse } from 'next';
|
||||
import nc from 'next-connect';
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
// Dynamic routing to handle different content types based on the subfolder
|
||||
router.use('/:subfolder', (req, res, next) => {
|
||||
const { subfolder } = req.params;
|
||||
req.subfolder = subfolder; // Pass the subfolder as part of the request for later use
|
||||
next();
|
||||
const handler = nc({
|
||||
onError: (err, req, res, next) => {
|
||||
console.error(err.stack);
|
||||
res.status(500).end('Something broke!');
|
||||
},
|
||||
onNoMatch: (req, res) => {
|
||||
res.status(404).end('Page is not found');
|
||||
}
|
||||
});
|
||||
|
||||
// POST: Upload files to a specific subfolder
|
||||
router.post('/:subfolder', createUploadMiddleware(req.subfolder).array('image'), (req, res) => {
|
||||
processFiles(req, res, req.subfolder);
|
||||
handler.use((req: NextApiRequest, res: NextApiResponse, next) => {
|
||||
const subfolder = req.query.subfolder as string;
|
||||
const upload = createUploadMiddleware(subfolder).array('image');
|
||||
upload(req, res, (err) => {
|
||||
if (err) {
|
||||
return res.status(500).json({ error: 'Failed to upload files.', details: err.message });
|
||||
}
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
// GET: List files from a specific subfolder
|
||||
router.get('/:subfolder', (req, res) => {
|
||||
listFiles(req, res, req.subfolder);
|
||||
handler.post((req: NextApiRequest, res: NextApiResponse) => {
|
||||
// Process uploaded files
|
||||
// Example response
|
||||
res.json({ message: 'Files uploaded successfully', files: req.files });
|
||||
});
|
||||
|
||||
// DELETE: Delete a specific file from a subfolder
|
||||
router.delete('/:subfolder', (req, res) => {
|
||||
deleteFile(req, res, req.subfolder);
|
||||
handler.get((req: NextApiRequest, res: NextApiResponse) => {
|
||||
// Handle listing files
|
||||
//listFiles(req, res, req.subfolder);
|
||||
listFiles(req, res, req.query.subfolder as string);
|
||||
});
|
||||
|
||||
export default router;
|
||||
handler.delete((req: NextApiRequest, res: NextApiResponse) => {
|
||||
// Handle deleting files
|
||||
deleteFile(req, res, req.query.subfolder as string);
|
||||
});
|
||||
|
||||
export const config = {
|
||||
api: {
|
||||
bodyParser: false,
|
||||
},
|
||||
};
|
||||
|
||||
export default handler;
|
||||
|
||||
// ------------------------------------------------------------
|
||||
//handling file uploads
|
||||
import multer from 'multer';
|
||||
import sharp from 'sharp';
|
||||
|
||||
// Generalized Multer configuration
|
||||
export function createUploadMiddleware(folder) {
|
||||
export const createUploadMiddleware = (folder: string) => {
|
||||
const storage = multer.diskStorage({
|
||||
destination: (req, file, cb) => {
|
||||
const uploadPath = path.join(process.cwd(), 'public/content', folder);
|
||||
@ -49,8 +71,8 @@ export function createUploadMiddleware(folder) {
|
||||
cb(null, `${prefix}${path.extname(file.originalname)}`);
|
||||
}
|
||||
});
|
||||
return multer({ storage: storage });
|
||||
}
|
||||
return multer({ storage });
|
||||
};
|
||||
|
||||
async function processFiles(req, res, folder) {
|
||||
if (!req.files || req.files.length === 0) {
|
@ -4,13 +4,16 @@ import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { url } from 'inspector';
|
||||
import ProtectedRoute, { serverSideAuth } from "/components/protectedRoute";
|
||||
import axiosInstance from '../src/axiosSecure';
|
||||
|
||||
|
||||
const PDFViewerPage = ({ pdfFiles }) => {
|
||||
const [files, setFiles] = useState(pdfFiles);
|
||||
|
||||
const handleFileDelete = async (fileName) => {
|
||||
const subfolder = 'permits'; // Change this as needed based on your subfolder structure
|
||||
try {
|
||||
await axios.delete(`/api/delete-file?name=${fileName}`);
|
||||
await axiosInstance.delete(`/api/content/${subfolder}?file=${fileName}`);
|
||||
setFiles(files.filter(file => file.name !== fileName));
|
||||
} catch (error) {
|
||||
console.error('Error deleting file:', error);
|
||||
@ -22,8 +25,9 @@ const PDFViewerPage = ({ pdfFiles }) => {
|
||||
const formData = new FormData();
|
||||
formData.append('file', file);
|
||||
|
||||
const subfolder = 'permits'; // Change this as needed based on your subfolder structure
|
||||
try {
|
||||
const response = await axios.post('/api/upload-file', formData, {
|
||||
const response = await axiosInstance.post(`/api/content/${subfolder}`, formData, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
@ -34,11 +38,11 @@ const PDFViewerPage = ({ pdfFiles }) => {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
return (
|
||||
<Layout>
|
||||
<h1 className="text-3xl font-bold p-4 pt-8">Разрешителни</h1>
|
||||
<ProtectedRoute>
|
||||
|
||||
<input type="file" onChange={handleFileUpload} className="mb-4" />
|
||||
{files.map((file, index) => (
|
||||
<div key={file.name} className="py-2">
|
||||
|
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user