[resumes][feat] file upload

pull/321/head
Keane Chan 3 years ago
parent 6a58342b38
commit cdd2aa4f07
No known key found for this signature in database
GPG Key ID: 32718398E1E9F87C

@ -34,7 +34,6 @@
"react-pdf": "^5.7.2",
"react-query": "^3.39.2",
"superjson": "^1.10.0",
"uuid": "^9.0.0",
"zod": "^3.18.0"
},
"devDependencies": {
@ -45,7 +44,6 @@
"@types/react": "^18.0.21",
"@types/react-dom": "^18.0.6",
"@types/react-pdf": "^5.7.2",
"@types/uuid": "^8.3.4",
"autoprefixer": "^10.4.12",
"postcss": "^8.4.16",
"prettier-plugin-tailwindcss": "^0.1.13",

@ -1,11 +1,13 @@
import axios from 'axios';
import { formidable } from 'formidable';
import formidable from 'formidable';
import * as fs from 'fs';
import type { NextApiRequest, NextApiResponse } from 'next';
import { v4 as uuidv4 } from 'uuid';
import { env } from '~/env/server.mjs';
import { supabase } from '~/utils/supabase';
const BASE_URL = `${env.SUPABASE_URL}/storage/v1/object`;
const BASE_FILE_URL = `${BASE_URL}/public`;
export const config = {
api: {
@ -17,33 +19,26 @@ export default async function handler(
req: NextApiRequest,
res: NextApiResponse,
) {
const headers = {
'Content-Type': 'multipart/form-data',
apiKey: env.SUPABASE_ANON_KEY,
authorization: 'Bearer ' + env.SUPABASE_ANON_KEY,
};
if (req.method === 'POST') {
try {
const form = formidable({ multiples: false });
const form = formidable({ keepExtensions: true });
form.parse(req, async (err, fields, files) => {
if (err) {
throw err;
}
const { file } = files;
const actualFile = file instanceof Array ? file[0] : file;
const filePath = `${uuidv4()}-${actualFile.originalFilename}`;
const { key } = fields;
const { file } = files;
const parsedFile: formidable.File =
file instanceof Array ? file[0] : file;
const filePath = `${Date.now()}-${parsedFile.originalFilename}`;
const convertedFile = fs.readFileSync(parsedFile.filepath);
supabase.storage.from(key as string).upload(filePath, convertedFile);
const data = await axios.post(
`${BASE_URL}/${key}/${filePath}`,
actualFile,
{
headers,
},
);
return res.status(200).json({
url: data.data.key,
url: `${BASE_FILE_URL}/${key}/${filePath}`,
});
});
} catch (error: unknown) {

@ -71,7 +71,7 @@ export default function SubmitResumeForm() {
...data,
url,
});
// Router.push('/resumes');
router.push('/resumes');
reset();
};

@ -0,0 +1,9 @@
import { createClient } from '@supabase/supabase-js';
import { env } from '~/env/server.mjs';
const { SUPABASE_URL } = env;
const { SUPABASE_ANON_KEY } = env;
// Create a single supabase client for interacting with your database
export const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY);
Loading…
Cancel
Save